【发布时间】:2018-03-07 00:16:36
【问题描述】:
我目前正在研究c编程语言的多维数组和指针。
我被问到以下问题
假设你有以下声明:
int grid[30][100];.grid[22][0]的地址有两种表达方式。
作者提供了以下答案
&grid[22][0] or grid[22]
我想出了
//notice for the second answer, I placed an address operator & at the front
&grid[22][0] or &grid[22]
我用下面的代码测试了
#include <stdio.h>
int main(void){
int ar[2][3] = {
{11, 22, 33},
{44, 55, 66}
};
printf("%p\n", &ar[2][0]);
printf("%p\n", ar[2]);
printf("%p\n", &ar[2]);
return 0;
}
并且所有三个表单都打印了相同的值
0062ff30
0062ff30
0062ff30
那么作者的答案grid[22] 和我的答案&grid[22] 是否相同?它们怎么可能相等?
【问题讨论】:
-
地址相等,数据类型不相等。
&ar[2][0]是int*。ar[2]衰减为int*和&ar[2]是int (*)[3]。
标签: c arrays pointers multidimensional-array