C arr+的含义;1、*arr+;1、**arr+;三维阵列中的1
我有一个问题: 假设起始地址是100C arr+的含义;1、*arr+;1、**arr+;三维阵列中的1,c,arrays,C,Arrays,我有一个问题: 假设起始地址是100 int arr[2][3][2] = {{{2,4},{7,8},{3,4}},{{2,2},{2,3},{3,4}}}; printf(“%u %u %u %d \n”,arr,*arr,**arr,***arr); // Line 2 printf(“%u %u %u %d \n”,arr+1,*arr+1,**arr+1,***arr+1); // Line 3 } Answer: 100, 100, 100, 2 114, 104, 102, 3
int arr[2][3][2] = {{{2,4},{7,8},{3,4}},{{2,2},{2,3},{3,4}}};
printf(“%u %u %u %d \n”,arr,*arr,**arr,***arr); // Line 2
printf(“%u %u %u %d \n”,arr+1,*arr+1,**arr+1,***arr+1); // Line 3
}
Answer:
100, 100, 100, 2
114, 104, 102, 3
说明:
对于第3行:arr+1
在第三维中增加,因此指向值
在114处,*a+1
在第二维度中递增,因此指向104,**arr+1
增加第一个维度,从而指向102,***arr+1
首先获得
值,然后将其递增1。因此是第二行的输出
我的问题——我已经尽力了。但我可以理解第三行的解释!请解释一下你的答案是错的。第3行的第一个值应该是112,而不是114 在指针上使用算术运算时,它会将地址更改一定数量的元素(数组存储的大小)。当您将数组当作指针使用时,C将为您管理它 当您使用
arr
时,编译器会说您有一个指向包含两个int[3][2]
类型元素的数组的指针。因此,向其中添加一意味着添加sizeof(int[3][2])
,即12。以下是一张表,显示了这一点:
code element type ints per element bytes per element array length
-----------------------------------------------------------------------------
arr int[3][2] 6 12 2
*arr int[2] 2 4 3
**arr int 1 2 2
在您的示例中,任何“解释”都没有多大价值。看,你把事情搞混了。这是因为如果您使用C的malloc进行分配,那么您的multi--ing(**arr等)才是合理的。然后,2D数组的行是(int*)类型的arr[i],在任何行中,列值是(int*)类型的arr[i][j],整个2D矩阵是(int*)类型的*arr。在3D中,整个3D结构的arr[i][j][k]类型(int)一直到**arr。但是使用int-arr[2][3][2]={…},只需使用arr[i][j][k]获得矩阵元素,即arr[0],arr[1]用于行。指针对于那些编译时分配的2-3D矩阵不是很有用。始终记住**arr是指向指针的指针,当且仅当有人出现并执行所有C-malloc-ing时。关于,M.什么是
int-arr[2][3][2]
?它是由2个元素组成的数组,类型为int[3][2]
。这是三维空间
什么是int[3][2]
?它是类型为int[2]
的3个元素的数组。这是第二维度
什么是int[2]
?它是由两个int
类型的元素组成的数组。这是第一维度
这是图表
第2行:
指向第三维的第一个元素arr
指向第二维度的第一个元素*arr
指向第一维度的第一个元素**arr
取第一维度的第一个元素的值***arr
100
开始。因此第2行的输出为:“1001001002”
第3行:
指向三维的第二个元素arr+1
指向第二维度的第二个元素*arr+1
指向第一维度的第二个元素**arr+1
获取第一维度的第一个元素的值并将其递增李>***arr+1
从图中可以看出,第三维的第二个元素有地址
112
(不是114!),第二维的第二个元素有地址104
,第一维的第二个元素有地址102
。因此,第3行的输出必须是:“112、104、102、3”***arr
当我看到它时,我的眼睛和大脑会受到伤害。由于优先级的原因,*arr+1
是存储在arr
的值添加到数字1中。@Kevin在本例中,存储在arr
的值的类型为int[3][2]
。您不能将其添加到号码中1@kotlomoyarr
衰减为一个指针,因此通过指针算法增加1;它实际上将值增加了>1,但它对指针+1
是有效的。对不起,系统耗尽了我所有的星号,所以不要读它。在表格的帮助下进行了很好的解释