int*_*075 7 c pointers multidimensional-array sub-array
我有以下代码片段:
char board[3][3] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'}
};
printf("address of board : %p\n", &board);
printf("address of board[0] : %p\n", &board[0]);
Run Code Online (Sandbox Code Playgroud)
两个printf()语句都打印相同的值:0x0013ff67
据我所知,board(ie)数组名称代表第一个子数组的地址(即)board[0]和
board[0] 表示第一个数组中第一个元素的地址(即) board[0][0]
为什么我在所有printf()陈述中都得到相同的地址?我希望这两个语句都有不同的地址.
我对这些东西很新,并且不理解这种行为.请赐教.
据我所知,board(即)数组名称代表第一个子数组(即)board[0]的地址
board仅当在这些上下文之外使用时,这才是正确的
&数sizeof当其中任何一个适用时,表达式board表示数组并保持数组的类型 ( char[3][3])。将&运算符应用于它会导致获取数组的地址,这当然等于其第一个元素的地址,只是具有不同的类型(char(*)[3][3]而不是char(*)[3])。对于数组也是如此,board对于它的第一个子数组也是如此board[0]。
当您在这些上下文之外使用它时,您将获得第一个元素(在您的情况下为子数组)的地址。该地址不是一个对象,而只是一个值。值没有地址,但对象有。尝试应用&它会失败。例如
// error: trying to apply '&' on something that has no address
&(1 ? board : board)
Run Code Online (Sandbox Code Playgroud)
请注意,上述内容适用于 C;不一定是C++。