对数组名取地址是什么?

来源:互联网 发布:windows查看本机端口 编辑:程序博客网 时间:2024/04/30 02:28


这两天有人问以下有什么代码有什么不同?

1 int array[100];2 3 memset(array,  0, sizeof(array));4 memset(&array, 0, sizeof(array));


第3行和第4行有什么不同吗?其实从效果上来说是一样的,但是这里要注意 array 和 &array 的类型是不同的。array 相当于 &array[0],而 &array 是一个指向 int[100] 的指针,类型是 int(*)[100]。
以下代码可以看出这个不同:
 1 #include <stdio.h> 2  3 int main() 4 { 5         int array[100] = {0, 1, 2}; 6         typedef int (*ARRAY)[100]; 7         int* p1 = array; 8         ARRAY p2 = &array; 9         //int* p3 = &array;     //这样编译错误10         11         printf("p1 = 0x%08X\n", p1);12         printf("p2 = 0x%08X\n", p2);13         printf("p1[2] = %d\n", p1[2]);14         printf("p2[2] = %d\n", p2[2]);15         printf("(*p2)[2] = %d\n", (*p2)[2]);16         17         getchar();18         return 0;19 }


运行结果可能是:

p1 = 0x0022FDF8p2 = 0x0022FDF8p1[2] = 2p2[2] = 2294040(*p2)[2] = 2


0 0
原创粉丝点击