Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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 2D数组同时更改2个元素_C_Arrays_Multidimensional Array - Fatal编程技术网

C 2D数组同时更改2个元素

C 2D数组同时更改2个元素,c,arrays,multidimensional-array,C,Arrays,Multidimensional Array,这是我的2D数组intMyArray[79][24]每当我更改第0行的一个元素时,它都会同时更改第24行的另一个元素,反之亦然 例如,myarray[35][0]='X'同时将myarray[35][0]和myarray[34][24]更改为X。当我尝试myarray[40][24]='X'它同时更改myarray[40][24]和myarray[41][0] 第一行和最后一行似乎在相互镜像。如何阻止这种情况发生?您的数组在第一维度的范围是0到78,在第二维度的范围是0到23。当您试图访问超出数

这是我的2D数组
intMyArray[79][24]每当我更改第0行的一个元素时,它都会同时更改第24行的另一个元素,反之亦然

例如,
myarray[35][0]='X'
同时将
myarray[35][0]
myarray[34][24]
更改为X。当我尝试
myarray[40][24]='X'
它同时更改
myarray[40][24]
myarray[41][0]


第一行和最后一行似乎在相互镜像。如何阻止这种情况发生?

您的数组在第一维度的范围是0到78,在第二维度的范围是0到23。当您试图访问超出数组边界的元素时,行为没有定义,任何事情都可能发生。这就是可能导致您出现问题的原因。如果要访问索引[x][24],则必须按如下方式声明数组:
int myarray[79][25]


“镜像”显然发生了,因为在内存中,数组元素彼此相邻分配,您可以想象它就像一条很长的线。因此,在索引之后,例如
[1][23]
就是(可能)索引
[2][0]
。但是(可能)不能保证,所以使用这样的构造不是一个好主意。即使定义了它,也会非常混乱。

您的数组在第一维的范围是0到78,在第二维的范围是0到23。当您试图访问超出数组边界的元素时,行为没有定义,任何事情都可能发生。这就是可能导致您出现问题的原因。如果要访问索引[x][24],则必须按如下方式声明数组:
int myarray[79][25]

“镜像”显然发生了,因为在内存中,数组元素彼此相邻分配,您可以想象它就像一条很长的线。因此,在索引之后,例如
[1][23]
就是(可能)索引
[2][0]
。但是(可能)不能保证,所以使用这样的构造不是一个好主意。即使定义了它,它也非常混乱。

规范:

连续的下标运算符指定多维数组对象的元素。 如果E是n维数组(n≥ 2) 尺寸为i×j×。。。x k,然后E(用作 而不是左值)转换为指向(n)的指针− 1) 二维数组 尺寸j×。。。×k。如果一元*运算符显式应用于此指针,或 作为订阅的隐式结果,结果是引用的(n− 1) -维度 数组,如果用作左值以外的值,它本身将转换为指针。接下来 由此可知,数组按行主顺序存储(最后一个下标变化最快)

C是一种允许程序员做很多事情的语言。例如,没有
索引AutofBoundsError
。数组只是指向第一个单元格的指针,然后它保留了下一个单元格的数组长度

当您声明int[79][24]时,它会为79*24单元格进行预订。他们一个接一个地去。如果数组维度为79x24,则第一维度的索引范围为0-78,第二维度的索引范围为0-23。地址34,24处的细胞实际上是34,23之后的一个,在内存中是35,0

让我们以6x4大小的阵列为例:

Your array represented as expected by you with values:
+---+---+---+---+---+---+---+
|   | 0 | 1 | 2 | 3 | 4 | 5 |
+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+---+---+---+---+---+---+---+
| 1 | 0 | 0 | 0 | 0 | 0 | 0 |
+---+---+---+---+---+---+---+
| 2 | 0 | 0 | 0 | 0 | 0 | 0 |
+---+---+---+---+---+---+---+
| 3 | 0 | 0 | 0 | 0 | 0 | 0 |
+---+---+---+---+---+---+---+

Your array with cell adresses (where start is the adress of cell 0,0):
+---+------------+------------+------------+------------+------------+------------+
|   | 0          | 1          | 2          | 3          | 4          | 5          |
+---+------------+------------+------------+------------+------------+------------+
| 0 | start      | start + 1  | start + 2  | start + 3  | start + 4  | start + 5  |
+---+------------+------------+------------+------------+------------+------------+
| 1 | start + 6  | start + 7  | start + 8  | start + 9  | start + 10 | start + 11 |
+---+------------+------------+------------+------------+------------+------------+
| 2 | start + 12 | start + 13 | start + 14 | start + 15 | start + 16 | start + 17 |
+---+------------+------------+------------+------------+------------+------------+
| 3 | start + 18 | start + 19 | start + 20 | start + 21 | start + 22 | start + 23 |
+---+------------+------------+------------+------------+------------+------------+
规格:

连续的下标运算符指定多维数组对象的元素。 如果E是n维数组(n≥ 2) 尺寸为i×j×。。。x k,然后E(用作 而不是左值)转换为指向(n)的指针− 1) 二维数组 尺寸j×。。。×k。如果一元*运算符显式应用于此指针,或 作为订阅的隐式结果,结果是引用的(n− 1) -维度 数组,如果用作左值以外的值,它本身将转换为指针。接下来 由此可知,数组按行主顺序存储(最后一个下标变化最快)

C是一种允许程序员做很多事情的语言。例如,没有
索引AutofBoundsError
。数组只是指向第一个单元格的指针,然后它保留了下一个单元格的数组长度

当您声明int[79][24]时,它会为79*24单元格进行预订。他们一个接一个地去。如果数组维度为79x24,则第一维度的索引范围为0-78,第二维度的索引范围为0-23。地址34,24处的细胞实际上是34,23之后的一个,在内存中是35,0

让我们以6x4大小的阵列为例:

Your array represented as expected by you with values:
+---+---+---+---+---+---+---+
|   | 0 | 1 | 2 | 3 | 4 | 5 |
+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+---+---+---+---+---+---+---+
| 1 | 0 | 0 | 0 | 0 | 0 | 0 |
+---+---+---+---+---+---+---+
| 2 | 0 | 0 | 0 | 0 | 0 | 0 |
+---+---+---+---+---+---+---+
| 3 | 0 | 0 | 0 | 0 | 0 | 0 |
+---+---+---+---+---+---+---+

Your array with cell adresses (where start is the adress of cell 0,0):
+---+------------+------------+------------+------------+------------+------------+
|   | 0          | 1          | 2          | 3          | 4          | 5          |
+---+------------+------------+------------+------------+------------+------------+
| 0 | start      | start + 1  | start + 2  | start + 3  | start + 4  | start + 5  |
+---+------------+------------+------------+------------+------------+------------+
| 1 | start + 6  | start + 7  | start + 8  | start + 9  | start + 10 | start + 11 |
+---+------------+------------+------------+------------+------------+------------+
| 2 | start + 12 | start + 13 | start + 14 | start + 15 | start + 16 | start + 17 |
+---+------------+------------+------------+------------+------------+------------+
| 3 | start + 18 | start + 19 | start + 20 | start + 21 | start + 22 | start + 23 |
+---+------------+------------+------------+------------+------------+------------+

数组的内存是连续的,因此尽管您定义

int myarray[79][24];
访问

int n = myarray[34][24];
这是绝对不允许的


它可能访问myarray[35][0]
,但该行为尚未定义。

数组的内存是连续的,因此尽管您定义了

int myarray[79][24];
访问

int n = myarray[34][24];
这是绝对不允许的


它可能访问myarray[35][0],但该行为未定义。

请发布显示问题的。显示一些输入、预期输出和实际输出的示例。请发布显示问题的。显示一些输入、预期输出和实际输出的示例。我认为它的定义是
myarray[34][24]
为24个单元格保留34个空间,然后这24个单元格与分配的空间匹配。在内存页切换上可能会有不同的工作方式,但我不这么认为。我会找文件的。@Xentros对不起,我应该更清楚一点
int-myarray[79][24]
后跟
int-n=myarray[34][24]
是严格禁止的。这是根据@xenteros子句定义的行为,请。@xenteros这看起来不错,尽管另一个答案与我的答案实际上是一样的,但已经被投票通过了。我发现有趣的是,在本例中,您说数组溢出行为保证是好的-除了未提及的行为