問題引出:一個2維數組board[3][3]
**(board+1)是指向哪個呢?
是board[1][0]還是board[0][1]?
答案是:board[1][0];
答案是: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個元素。
.png)
源頭: board,**(board+1)表示啥意思呢?
漸進:“*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]
.png)
源頭: 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]