C++从C继承了数组,几乎无处不在.C++提供了易于使用且不易出错的抽象(std::vector<T>自C++ 98和C++ 11std::array<T, n>以来),因此对数组的需求并不像在C中那样频繁出现.但是,当您阅读遗产时代码或与用C编写的库交互,你应该牢牢掌握数组如何工作.
本FAQ分为五个部分:
如果您觉得此常见问题解答中缺少重要内容,请写下答案并将其作为附加部分链接到此处.
在下文中,"数组"表示"C数组",而不是类模板std::array.假定了C声明符语法的基本知识.请注意,面对异常,手动使用new和delete如下所示是非常危险的,但这是另一个常见问题解答的主题.
(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)
int main()
{
matrix[2][4] = {{11,22,33,99},{44,55,66,110}};
int **ptr = (int**)matrix;
printf("%d%d",**matrix,*ptr);
}
Run Code Online (Sandbox Code Playgroud)
但是当一个2-d数组作为参数传递时,它被转换为(*matrix)[2] ..编译器将这个数组存储为什么类型...是存储为2-d数组还是双指针或指向数组的指针.如果它作为数组存储,它如何在不同的情况下如上所述进行不同的解释.请帮我理解.
我有以下代码片段:
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()陈述中都得到相同的地址?我希望这两个语句都有不同的地址.
我对这些东西很新,并且不理解这种行为.请赐教.