【问题标题】:Understanding pointed value-assignment C理解有针对性的赋值 C
【发布时间】:2018-11-07 20:20:03
【问题描述】:

大家早上好/晚上好,

我想清除以下指针概念,

在这个原型中,我传递了第一个值,复制了 main 中给出的第一个参数 x,第二个我通过引用传递了它,因此我直接访问它的内存单元以永久更改它。

我没有(在函数中)得到的是函数如何管理值,

我会尝试更具体一些,我不明白这些分配有多少是“循环”的。

例如,这个函数对我来说似乎是一种交换函数,因为它接受 x 和整数并将 y 指向的值分配给 x,即 y+1 依次指向的值,依此类推。

所以我想知道这个分配序列何时开始和结束,以了解为什么我是在 main 中打印它还是在它 printf 的函数中打印它如果我没记错 {11,33,22,44 }

void Boh(int x,int *y)
{
    x = *y;
    *y = *(y+1);
    *(y+1) = x;
}

int main()
{
    int a[] = {11,22,33,44};
    Boh(a[0],&a[1]); \* (Point 1) *\
    return 0;
}

【问题讨论】:

  • 将值传递给x 毫无意义,因为您在第一条语句中更改了它:x = *y;

标签: c arrays function pointers


【解决方案1】:

首先要注意的是,函数的参数x 立即被*y 的值覆盖。所以这个参数的任何值都与结果无关。

函数正在交换 *y*(y + 1) 使用 x 作为临时。因为参数y 对应于main 中的&a[1],所以这是第一个被交换的位置。如果然后在表达式*(y + 1) 中将&a[1] 换成y,则得到*(&a[1]+ 1) == *((a + 1) + 1) = *(a + 2) = a[2]。所以a[1]a[2] 被交换了,如果你在调用Boh 之后打印数组的内容,你会看到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 2011-10-27
    • 2016-06-15
    • 2020-08-17
    相关资源
    最近更新 更多