Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 确定三维阵列中行元素的差异_C_Arrays_Multidimensional Array - Fatal编程技术网

C 确定三维阵列中行元素的差异

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

我需要知道是否有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]=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。。对从我的答案中删除了无意义的补充@麦克洗干净了@蓝精灵