我们有一个代码。C静态数组指针地址
#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
为什么输出它们不同?
确定,但技术上在中低端的 地址'k'不是'ad'的地址? 所以他们可能是相同的,或不是? – Daniel
是的。当您将数组作为值返回时,它会自动转换为第一个元素的地址,就像将它作为参数传递给'printf'一样。 – Barmar