关于2维数组与指针的探究

问题引出:

一个2维数组board[3][3]

**(board+1)是指向哪个呢?

是board[1][0]还是board[0][1]?

答案是:board[1][0];

我是这么理解2维数组board[3][3] :一个2维数组里面有3个1维数组 ,每个1维数组中包含3个元素;多维数组a[i][j][k]可以这么理解:a[i][j][k]表示一个3维数组有i个2维数组,每个2维数组中有j个1维数组,每个1维数组包含k个元素。

源头: board,**(board+1)表示啥意思呢?

board是数组board[0]的地址,而不是一个具体元素的地址。

board+1相当于是地址加上一个一维数组长度(board+1相当于是第0行数组首地址 加上一个一维数组长度的地址):

假如还是int board[4][5],那么sizeof(board)=5*sizeof(int) 。

也就是说,board指向一个5 int长度一维数组的头指针地址,那么board+1,则在地址上board=board+sizeof(int)*5。

哦,那就是board[1]的头指针地址了。

所以**(board+1)=board[1][0];

渐进:“*board = &board[0];”

个人体会:

这里的*borad是数组board[0]中的具体元素的地址,(*board+1相当于是第0行数组首地址加上一个具体元素地址)

具体事例:“int array[3][4];int *ptr = array; ”这个是不对的。

ptr和array有不同的级别,ptr指针引用的地址包含一个int类型的值,而array引用一个地址,那个地址引用另外一个包含int类型值的地址。

arry比ptr多了一级。

那么,ptr需要一个*,以获取地址中的值,而arry需要2个*。

所以应该初始化:int *ptr=*arry; 或者 int *ptr =&array[0][0]; 或者 int *ptr = array[0]

附录:

 
永不止步步 发表于12-02 10:00 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:308617个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号