我们有一个代码。
#include <stdio.h>
int* aa(int s){
static int ad[2] = {0};
ad[0] = s;
printf("aa() -> %p\n", &ad);
return ad;
}
int main(void) {
int *k = aa(3);
printf("main() -> %p\n", &k);
return 0;
}
编译,运行.. 输出
aa() -> 0x80497d0
main() -> 0xbfbe3e0c
或者我误解了或者这段代码有问题。
我们为静态数组ad
返回相同的地址,为什么它们的输出不同?
答案 0 :(得分:4)
在main
中,您打印的是k
指针变量的地址,而不是它指向的数组的地址。如果你这样做:
printf("main() => %p\n", k);
您将获得与aa
中打印的地址相同的地址。
答案 1 :(得分:2)
你写了printf“&amp; k”,它应该只是“k”。因此,您显示了变量k的地址,而不是广告的地址。 :
#include <stdio.h>
int* aa(int s){
static int ad[2] = {0};
ad[0] = s;
printf("aa() -> %p\n", &ad);
return ad;
}
int main(void) {
int *k = aa(3);
printf("main() -> %p\n", k);
return 0;
}
答案 2 :(得分:1)
&k
返回k
的地址,而不是它指向的地址。所以,你得到的是k
的地址。您应该将printf()
更改为
printf("main() -> %p\n", k);
^
No need for &