根据我的说法,以下代码应该成功运行,但在运行时失败.我没有得到原因:
void main()
{
int arr[5][3]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int *m=arr[0];
int **p=&m;
p=p+1;
printf("%d",**p);
}
Run Code Online (Sandbox Code Playgroud)
a.exe在gcc编译器,Windows 7 64位运行时已停止运行
数组数组和指针指针是完全不同的,不能互换使用.
例如,如果您查看数组,arr它在内存中看起来就像这样
+-----------+-----------+-----------+-----------+-----+-----------+ | arr[0][0] | arr[0][1] | arr[0][2] | arr[1][0] | ... | arr[4][2] | +-----------+-----------+-----------+-----------+-----+-----------+
当你有指向指针时p,程序并不真正知道它指向一个数组数组,而是被视为一个指针数组,在内存中看起来像这样:
+------+------+------+-----+ | p[0] | p[1] | p[2] | ... | +------+------+------+-----+ | | | | | v | | something | v | something v something
所以,当你做p + 1你到p[1]这显然是不一样的arr[1].
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |