gpt4 book ai didi

c - C中二维数组的"Direction"

转载 作者:行者123 更新时间:2023-12-04 10:51:48 26 4
gpt4 key购买 nike

作为 C 新手,我对二维数组有点困惑。

如果我想表示一个 3 行 5 列的矩阵,我猜正确的声明是:

char a[3][5];

那么,这是一个由 3 个指向 5 个字符数组的指针组成的数组还是什么?

为什么每当我尝试像下面这样循环它时,它似乎读取了错误的结果?

int x, y;
for( x=0; x<3; x++ ){
for( y=0; y<3; y++ ){
printf( "%c", a[x][y] );
}
}

下面的初始化方法是否等效且正确?

char a[3][5] = {
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1},
};

char a[3][5] = {1,0,0,0,1,
1,0,0,0,1,
1,0,0,0,1};

感谢任何最终即将到来的解释。


编辑

对不起打字错误,代码没有被复制。顺便说一句,我一直让他们阅读时像垂直阅读一样,而不是水平阅读。

同样在本教程的例子中http://www.cplusplus.com/doc/tutorial/arrays/它以一种对我来说不是直截了当的方式读取数组,因为它似乎适用于 5x3、HeightWidth、yx、colsrows 结构而不是 3x5、Width高度,xy。行第一个:

#define WIDTH 5
#define HEIGHT 3

int jimmy [HEIGHT][WIDTH];
int n,m;

int main ()
{
for (n=0;n<HEIGHT;n++)
for (m=0;m<WIDTH;m++)
{
jimmy[n][m]=(n+1)*(m+1);
}
return 0;
}

最佳答案

只是为了它是什么而不是什么。

char a[3][5];

不涉及指针。像这样的多维数组是 .... 数组的数组,依此类推。在您的例子中,您有一个包含 5 个字符的 3 个数组的数组。当你使用 typedef 时,它会变得更清晰。

typedef char T[5];
T a[3];

不涉及任何指针。如果你想访问这 3 个中的第一个数组,你可以这样做:

a[0]; 

它会返回一个 char[5] 类型的对象。通常,您不会注意到这一点,因为通常您会索引所有维度。因此 a[0] 返回的数组是下一个索引的下标,例如 a[0][1][1] 将应用于 a[0] 返回的数组,我们之前已经知道它的类型为 char[5].

So, is this an array of 3 pointers to 5 arrays of chars or what?

让我们创建该类型,看看它与上面的有何不同。创建它很简单,一旦你掌握了基本的声明符:

  • 创建指针:*D
  • 创建数组:D[N]

D 只是一个现有的另一个声明符。现在让我们继续。首先你说 array of 3 pointers to 5 arrays of chars...。我认为您的意思是指向 5 个字符数组的 3 个指针的数组。首先,array of 5 的创建方式如下

D1[5]

现在,让我们用一个指向声明符的指针替换D1:

(*D2)[5]

我们必须插入括号,因为下标运算符 [N] 比取消引用运算符 * 绑定(bind)得更好,否则它会被读取为 *( D2[5]) 这不是我们想要的。现在我们有了 指向 5 数组的指针

现在让我们来处理 3 的数组。将 D2 替换为 D3[3] 会产生以下结果:

(*D3[3])[5]

太好了,现在我们有一个array of 3 pointer to array of 5。只需放置该声明符所属的基类型即可生成完整的声明:

char (*D3[3])[5];

这当然是完全不同的事情 :) 您可以使用它来存储指向您的其他数组的指针,该数组的类型为 array of 3 arrays of 5 char。让我们将指向 a 的第一个子数组的指针存储到 D3[0] 中。我们之前发现 a[0] 的类型为 char[5]。我们可以将指向该数组的指针存储到 D3[0] 中,因为 D3 是一个指向 char[5] 的指针数组,巧合!

D3[0] = &a[0]; // works!

我希望这个小练习已经向您展示了指针和数组之间的一些关系。干杯!

关于c - C中二维数组的"Direction",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/812931/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com