C 语言中的好基友 数组和指针之五

来源:互联网 发布:厦门市公安局网络刻章 编辑:程序博客网 时间:2024/05/18 09:07

同样来自coolshell.cn的例子,运行后晕菜

#include <stdio.h>int main(){    int a[5];    printf("%d\n", sizeof(&a));    printf("%d\n", sizeof(a));    printf("1..%p\n", a);    printf("2..%p\n", a+1);    printf("3..%p\n", &a); //注意这个了,居然和a是同样地址,这种情况也只有数组名才能出现    printf("4..%p\n", &a+1); //这个就更神奇了,居然是偏移了sizeof(a),编译器认为&a这个指针类型是指向整个数组,我没法自圆其说了,只能说c编译器牛x    int *b;    b = a;    printf("5..%p\n", b);    printf("5..%p\n", &b);    printf("5..%p\n", &b+1);                                                                                return 0;}


结果:

4201..0xbfc3faec2..0xbfc3faf03..<span style="color:#cc0000;">0xbfc3faec</span>4..<span style="color:#cc0000;">0xbfc3fb00</span>5..0xbfc3faec5..0xbfc3fae85..0xbfc3faec

结论:

对于数组名这个酷似指针的家伙,如果再次取地址编译器的行为可是不一样,我想如果没有弄懂编译器到底咋实现的,你没法真正搞清楚。


0 0
原创粉丝点击