【发布时间】:2017-10-16 21:31:40
【问题描述】:
我正在学习 C 语言,但我对二维数组指针感到困惑。
我有以下声明
int a[3][5];
int *b[3][3];
int (*c)[3][5];
int *(d[3][5]);
int (*e[3])[5];
谁能帮我解释一下
- 是否有有效的声明
- a,b,c,d,e 的大小(假设在 64 位机器上,地址 id 为 8 个字节)
- 他们指向什么
- 如何访问二维数组中的元素
我对二维数组中指针的使用完全感到困惑......我猜其中一些是等价的......但有些可能不是好习惯
【问题讨论】:
-
如果 b 是 [3][5] 而不是 [3][3],b 和 d 将是相同的。我假设您打算将其设为 [3][5]?
-
二维数组是一维数组的数组。例如,
rows一维数组数量的数组。int *b[3][3]是指向int类型的指针的二维数组。int (*c)[3][5]是一个 指向int的 3x5 数组的指针int *(d[3][5]);与*d[3][5]相同,int (*e[3])[5];是一个指向 3 个int(其中 5 个) -
@DavidC.Rankin 否:
d与 b 相同(除了 3 和 5)- 括号无效,e是 3 个指针的数组,其中指向 5 个整数的数组。特别是 sizeof(e) 是 3*8 = 24。 -
不错的汤姆。