C静态数组指针地址

时间:2015-04-14 16:49:10

标签: c pointers

我们有一个代码。

#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返回相同的地址,为什么它们的输出不同?

3 个答案:

答案 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 &