小编GiT*_*ato的帖子

为什么索引没有越界,尽管直观上应该如此?

我对 C 编程比较陌生,在运行以下代码并使用 gdb 和 lldb 对其进行调试时,我偶然发现了一个对我来说无法解释的行为。

简而言之:当交换索引 i 和 j (max i != max j) 时,在双重嵌套 for 循环内访问二维数组中的值时,如果使用array[i访问该值似乎并不重要][j] 或数组[j][i]

这两个循环和数组大部分是相同的。

 unsigned matrix[3][1] =
   {
       {3},
       {4},
       {5}
   };

   //Loop1
   for (size_t i = 0; i < sizeof(matrix) / sizeof(*matrix); i++)
   {
        for (size_t j = 0; j < sizeof(matrix[i]) / sizeof(*matrix[i]); j++)
        {
            matrix[i][j] <<= 1;
            printf("matrix[%zu][%zu]  has the value: %d\n", i, j, matrix[i][j]);
        }
   }

   //same two dimensional array as matrix
   unsigned matrix2[3][1] =
   {
       {3}, …
Run Code Online (Sandbox Code Playgroud)

c pointers sizeof multidimensional-array

1
推荐指数
1
解决办法
140
查看次数

标签 统计

c ×1

multidimensional-array ×1

pointers ×1

sizeof ×1