哪位大侠忙我解释一下这个数组、指针的例子呀~~~

dapangpang080808 2012-04-26 07:40:00
/* Program 7.9 Multidimensional arrays and pointers*/
#include <stdio.h>

int main(void)
{
char board[3][3] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'}
};

char *pboard = *board; /* A pointer to char */

for(int i = 0; i < 9; i++)
printf(" board: %c\n", *(pboard + i));
return 0;
}


-----------------例子结束-------------------------

非常不明白的地方是:

1.*(pboard + i)这个地方每次循环都得到什么结果?

2.如果大侠帮我写出每次循环的具体过程,就太感谢了~~~~
...全文
149 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dapangpang080808 2012-04-27
  • 打赏
  • 举报
回复
非常感谢,似乎懂了~~~
yang_xuan 2012-04-26
  • 打赏
  • 举报
回复
感谢你的问题,小虾我也首页匪浅呀,谢啦
nadleeh 2012-04-26
  • 打赏
  • 举报
回复
board分配连续9个字节空间 *pboard 指向一个字节空间,类型为char 剩下的你懂了吧?
sno_guo 2012-04-26
  • 打赏
  • 举报
回复
或者楼主可以去看下 环形buffer是怎么设计的, 其实就是指针的来回跳动
sno_guo 2012-04-26
  • 打赏
  • 举报
回复
楼上正解,pboard这样的指针 直接+ - 是很常见的,特别是在linux的编程中,呵呵呵
shen402425684 2012-04-26
  • 打赏
  • 举报
回复
*(pboard+i)就是随着i的递增指针往后移动。*pboard=board[0][0]
evencoming 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
其实还是不是很明白,就内个i不是从0到8么,那当它为8的时候,怎么就是数组中的数了呢?
还有您这个board[m][n]. 其中i==m*3+n; n<3;是公式?
新手,请见谅~~~
[/Quote]
对,这个是某种二维数组的内存模型.

反过来就是 board[m][n] 等同于 *((int *)board+m*3+n).
(int *)board 等同于 *board.
这几个值恰好相等,就恰好这个代码能正常运行.

dapangpang080808 2012-04-26
  • 打赏
  • 举报
回复
其实还是不是很明白,就内个i不是从0到8么,那当它为8的时候,怎么就是数组中的数了呢?
还有您这个board[m][n]. 其中i==m*3+n; n<3;是公式?
新手,请见谅~~~
evencoming 2012-04-26
  • 打赏
  • 举报
回复
每次循环都是指向p[i].
对于这种所谓的二维数组 board, p[i]对应着 board[m][n]. 其中i==m*3+n; n<3;

33,317

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧