gpt4 book ai didi

c - args 和 args 有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 15:21:51 26 4
gpt4 key购买 nike

这是我的代码片段

    #include <stdio.h>

void change(int a[]){
printf("%p\n",&a);
}

int main(){
int b[] = {1,2} ;
printf("%p\n",&b);
change(b);
return 0;
}

我运行它,得到如下结果

    0x7fff5def1c60
0x7fff5def1c38

可以看出实参地址与形参地址不同然后我编辑了我的关注

    #include <stdio.h>

void change(int a[]){
printf("%p\n",a);
}

int main(){
int b[] = {1,2} ;
printf("%p\n",b);
change(b);
return 0;
}

然后我得到结果

    0x7fff56501c60
0x7fff56501c60

所以看起来实参和形参的地址是一样的。我很困惑 &a 和 a(a 是一个数组)有什么不同,为什么我从第一个片段中得到不同的地址?谢谢!

最佳答案

在:

printf("%p\n",&b);

您正在打印第一个数组单元格的地址。

在:

change(b);

特别是在:

void change(int a[]){
printf("%p\n",&a);
}

您正在打印变量 a 的地址,它本身就是一个衰减指针。所以它在语义上等同于:

void change(int* a){
printf("%p\n",&a);
}

要检索数组的第一个单元格,您需要将函数编写为:

void change(int* a){
printf("%p\n", a);
// ^^
}

关于c - args 和 args 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27120613/

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