C 确定三维阵列中行元素的差异
我需要知道是否有3D阵列,比如:C 确定三维阵列中行元素的差异,c,arrays,multidimensional-array,C,Arrays,Multidimensional Array,我需要知道是否有3D阵列,比如: int a[2][3][2]={{{1,2},{9,8},{3,7}},{{2,2},{1,4},{5,4}}}; 表达式a[1]-a[0]是如何计算的,计算内容是什么?始终将多维数组视为网格/表以下是将同一阵列拆分为多个部分: [2]=包含2个2D数组的容器 [3] =包含3个数组的容器 [2] =实际数据值 您正在访问的数据都取决于调用数组时放置的括号数,例如: a[1]={2,2},{1,4},{5,4}} a[1][1]={1,4} a[1][1][1
int a[2][3][2]={{{1,2},{9,8},{3,7}},{{2,2},{1,4},{5,4}}};
表达式a[1]-a[0]是如何计算的,计算内容是什么?始终将多维数组视为网格/表
以下是将同一阵列拆分为多个部分: [2]=包含2个2D数组的容器
[3] =包含3个数组的容器
[2] =实际数据值 您正在访问的数据都取决于调用数组时放置的括号数,例如:
a[1]={2,2},{1,4},{5,4}}
a[1][1]={1,4}
a[1][1][1]=4
表达式a[1]-a[0]无法执行,因为您正在用另一个数组减去一个数组,这意味着您正在使用指向数据的对象,而不是实际数据。但是,它实际上评估为:
a[1]={2,2},{1,4},{5,4}和
[0]={{1,2},{9,8},{3,7}所以,
{2,2},{1,4},{5,4}-{1,2},{9,8},{3,7} 表达式a[1]-a[0]计算什么 如果用作算术运算符
-
的运算符,它计算a[1]
和a[0]
所指向的指针之间的差值 #包括
#include <stdio.h>
int main(void){
int a[2][3][2]={{{1,2},{9,8},{3,7}},{{2,2},{1,4},{5,4}}};
printf("%d\n", (int)(a[1]-a[0]));//3
int (*b1)[2] = a[1];//b1 point to {1,2}
int (*b0)[2] = a[0];//b0 point to {2,2}
printf("%d\n", (int)(b1-b0));//3
printf("%d\n", (int)(&a[1]-&a[0]));//1
return 0;
}
/*
int a[2][3][2]
a <-> int (*)[3][2]
a[n] <-> int [3][2] <-> int (*)[2]
&a[n] <-> int (*)[3][2]
*/
内部主(空){
int a[2][3][2]={{{1,2}、{9,8}、{3,7}、{{2,2}、{1,4}、{5,4};
printf(“%d\n”,(int)(a[1]-a[0]);//3
int(*b1)[2]=a[1];//b1指向{1,2}
int(*b0)[2]=a[0];//b0指向{2,2}
printf(“%d\n”,(int)(b1-b0));//3
printf(“%d\n”,(int)(&a[1]-&a[0]);//1
返回0;
}
/*
INTA[2][3][2]
a int(*)[3][2]
a[n]int[3][2]int(*)[2]
&a[n]int(*)[3][2]
*/
a[1]-a[0]
尝试减去两个int**
。我相信这是一个编译器错误,而且这肯定不是你想要的。如果你不经过3维,你只需要做指针算术,你必须向a[0]
添加多少才能到达a[1]
?你想找出第1行和第2行的所有元素之间的差异吗?不,它减去相对于对象大小的地址,因此在本例中结果为3
。数组a[1]
和a[0]
衰减为int(*)[2]
,可以减去它们。@nilpointerinception是的,适合您。它告诉你,你的最后一段是不正确的。添加和删除指向同一个对象(这里的数组)的指针是完全有效的。有关结果,请阅读指针算术。@alk thnk您…想知道y3。明白了。没有编译错误。确定吗<代码>int a[2][3][2]={{{{1,2}、{9,8}、{3,7}、{{2,2}、{1,4}、{5,4}};printf(“%ld\n”,a[1]-a[0])代码>打印3
您的描述是&a[1]&a[0]
.Ouch。。对从我的答案中删除了无意义的补充@麦克洗干净了@蓝精灵