3 回答
TA贡献1799条经验 获得超9个赞
数组不是指针!
int a[] = {1, 2, 3};int *p = a; // p now points to a[0]多维阵列
int a[4][3][5]
int a[4][3][5]int b[60]
int a[4][3][5]int b[60]
int a[4][3][5]int b[60]
{
{1, 2, 3, 4, 5}
{6, 7, 8, 9, 10}
{11, 12, 13, 14, 15}}{
{16, 17, 18, 19, 20}
{21, 22, 23, 24, 25}
{26, 27, 28, 29, 30}}{
{31, 32, 33, 34, 35}
{36, 37, 38, 39, 40}
{41, 42, 43, 44, 45}}{
{46, 47, 48, 49, 50}
{51, 52, 53, 54, 55}
{56, 57, 58, 59, 60}}句法
int a[3][3];printf("%p %p", a, a[0]);0x7eb5a3b4 0x7eb5a3b4
但是,只有一个可以直接分配给指针。:
int *p1 = a[0]; // RIGHT !int *p2 = a; // WRONG !
为什么不能 a 分配给指针,但是 a[0] 能,会,可以?
aa[0]
为什么数组在为数组创建指针方面是多维的?
int a[4][5][95][8];int (*p)[5][95][8];p = a; // p = *a[0] // p = a+0
*p: int (*p)[5][95][8]int *p[5][95][8]
结语
如果数组在使用的上下文中没有其他用途,则它们将衰减为地址。 多维数组只是数组的数组,因此,“腐朽”地址将承担“我有子维度”的负担。 维度数据不能存在于指针中 除非你把它给它.
TA贡献2051条经验 获得超10个赞
static uint8_t l_matrix[10][20];
uint8_t (*matrix_ptr)[20] = l_matrix;
编辑:
编辑2:
typedef uint8_t array_of_20_uint8_t[20];array_of_20_uint8_t *matrix_ptr = l_matrix;
static uint8_t l_matrix[10][20];
(*l_matrix + (20 * rowno) + colno)
所有指针操作都会自动考虑指向对象的大小。-K&R第5.4节,第103页
- 3 回答
- 0 关注
- 839 浏览
添加回答
举报
