gpt4 book ai didi

C将指针传递给函数混淆

转载 作者:太空宇宙 更新时间:2023-11-04 05:08:09 24 4
gpt4 key购买 nike

我在这里有点困惑。这是一本很棒的 C 书,也许我对它质疑太多,但不知何故它没有意义。希望能说出我的困惑。

下面假设&a指向内存地址87,&b指向内存地址120;

int a = 3;
int b = 4;
swap(&a, &b);

void swap(int *px, int *py) {
int temp;
temp = *px;
*px = *py;
*py = temp;
}

好的,问题来了:当我们调用函数 swap 并将参数传递给函数时,我们实际上是将“px”设置为 87 还是将“*px”设置为 87?

因为如果我们将 *px 设置为 87 那么根据 * 符号的定义,我们设置的是指针指向的值,而不是 p 所持有的内存地址,这是错误的这个例子。另一方面,如果我们实际上将“p”设置为 87,那么 swap 中的代码就有意义了,因为当我们在函数中使用 * 符号时,我们将引用该地址中的值“3”这里。但是那为什么语法困惑,看起来好像我们在设置

*px = 87

?

最佳答案

如果 a 位于地址 88(需要正确对齐)并且 b 位于地址 120,则:

                                //   a   |   b   |   px   |  py   | temp
int a=3; // 3 -- -- -- --
int b=4; // 3 4 -- -- --
swap(&a, &b); // 4 3 -- -- --

void swap(int *px, int *py)
{ // 3 4 88 120 --
int temp;
temp = *px; // 3 4 88 120 3
*px = *py; // 4 4 88 120 3
*py = temp; // 4 3 88 120 3
}

px&a88,永远不会改变。*px 指代(别名)a。它可以重新命名为不同的变量,但这段代码不会那样做。

参数为px,类型为int*。参数不是*px。出于这个原因,许多程序员将其写为 int* px 而不是 int *px。调用 swap(&a, &b) 的效果是 px = &a 而不是 *px = &a

但请注意,C 没有“方法”,只有“函数”。

关于C将指针传递给函数混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6574500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com