Mam*_*rot 3 c arrays pointers dereference
以下代码提问:
#include <stdio.h>
int main(int argc,char *arg[]){
if (argc>2){
int m=atoi(arg[1]);
int n=atoi(arg[2]);
int a[m][n];
int (*p)[m][n]=&a;
printf("p : %p, *p : %p, **p : %p\n",p,*p,**p);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
主要环境:gcc版本4.6.3(Ubuntu/Linaro 4.6.3-1ubuntu5)x86-64
gcc main.c
./a.out 2 4
Run Code Online (Sandbox Code Playgroud)
输出:
p : 0xbfea7ef0, *p : 0xbfea7ef0, **p : 0xbfea7ef0
Run Code Online (Sandbox Code Playgroud)
问题是为什么p == *p == **p.我认为这可能是因为a是一个数组,一种常量指针,其地址是特定的,这涉及gcc的一些实现细节.
p是指向具有维度的数组的指针[m][n].该指针的值是地址a,因此打印p将获得地址a.
*p是一个维度的数组[m][n].作为指针的"值"是指向数组的第一个元素的指针,即a[0].这是同一个地址a.
**p是一个维度的数组[n].该指针的值是指向数组的第一个元素的指针,即a[0][0].这又是一个地址a.
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |