关于2维数组与指针的探究
时间:04-11 09:30 阅读:706次
*温馨提示:点击图片可以放大观看高清大图
简介: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个元素。
问题引出:一个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行数组首地址加上一个一维数组长度的地址):
假如还是intboard[4][5],那么sizeof(board)=5*sizeof(int)。也就是说,board指向一个5int长度一维数组的头指针地址,那么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]
附录: