[英]C pointers in a 2-D array context
这是一个具有8 x 8阵列的工作程序,代表一个小型棋盘。 实际的棋盘为4 x 4,并在数组中填充零。
// Chessboard representation
//
#include <stdio.h>
unsigned char uuboard[8][8]={
{1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1},
{1,1,0,0,0,0,1,1}, {1,1,0,0,0,0,1,1},
{1,1,0,0,0,0,1,1}, {1,1,0,0,0,0,1,1},
{1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1} };
unsigned char *uboard[8]={uuboard[0]+2, uuboard[1]+2, uuboard[2]+2, uuboard[3]+2,
uuboard[4]+2, uuboard[5]+2, uuboard[6]+2, uuboard[7]+2};
unsigned char **board=uboard+2;
int main(void) {
// Make a change to the board directly, using 2-D array
uuboard[3][3] = 8;
printf("Print the board by accessing the 2-D array directly\n");
for (int i=0;i<8;i++) {
for (int j=0;j<8;j++) {
printf("%d", uuboard[i][j]);
}
printf("\n");
}
printf("Print again using pointers\n");
for (int i=0; i<4; i++, printf("\n")) {
for (int j=0; j<4; j++) {
printf("%d", board[i][j]);
}
}
printf("\n");
return 0;
}
原始程序员似乎使用指针,因此他/她通过从0而不是2开始索引来到达实际的棋盘方块。 *uboard[8]
和**board
如何工作? 非常感谢您提供任何答案或对答案的引用。
线
unsigned char *uboard[8]={uuboard[0]+2, uuboard[1]+2, uuboard[2]+2, uuboard[3]+2, uuboard[4]+2, uuboard[5]+2, uuboard[6]+2, uuboard[7]+2};
相当于
unsigned char *uboard[8]={&uuboard[0][2], &uuboard[1][2], &uuboard[2][2], &uuboard[3][2], &uuboard[4][2], &uuboard[5][2], &uuboard[6][2], &uuboard[7][2]};
和
unsigned char **board=uboard+2;
相当于
unsigned char **board = &uboard[0]+2;
// or
unsigned char **board = &uboard[2];
在这里,无符号字符* uboard [8]是一个指针数组,可以存储8个指向无符号字符的指针。 现在,uboard [0] = uuboard [0] +2。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.