专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

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

作者:佚名   来源:本站原创   点击数:  更新时间:2014年04月10日   【字体:
问题引出:一个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]

附录: 

 
关闭窗口