相关疑难解决方法(0)

如何在C++中使用数组?

C++从C继承了数组,几乎无处不在.C++提供了易于使用且不易出错的抽象(std::vector<T>自C++ 98和C++ 11std::array<T, n>以来),因此对数组的需求并不像在C中那样频繁出现.但是,当您阅读遗产时代码或与用C编写的库交互,你应该牢牢掌握数组如何工作.

本FAQ分为五个部分:

  1. 类型级别的数组和访问元素
  2. 数组创建和初始化
  3. 赋值和参数传递
  4. 多维数组和指针数组
  5. 使用数组时常见的陷阱

如果您觉得此常见问题解答中缺少重要内容,请写下答案并将其作为附加部分链接到此处.

在下文中,"数组"表示"C数组",而不是类模板std::array.假定了C声明符语法的基本知识.请注意,面对异常,手动使用newdelete如下所示是非常危险的,但这是另一个常见问题解答的主题.

(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)

c++ arrays pointers c++-faq multidimensional-array

469
推荐指数
5
解决办法
12万
查看次数

为什么`&array`和`array`指向同一个地址?

到现在为止,我认为数组与指针相同.但我发现了一个奇怪的案例:

int array[5] = { 10,11,12,13,14};

std::cout << array << std::endl;
std::cout << &array << std::endl;
std::cout << &array[0] << std::endl;

int *pArray = new int[5];

std::cout << pArray << std::endl;
std::cout << &pArray << std::endl;
std::cout << &pArray[0] << std::endl;
Run Code Online (Sandbox Code Playgroud)

产量

0x7ffeed730ad0
0x7ffeed730ad0
0x7ffeed730ad0

0x7f906d400340
0x7ffeed730a30
0x7f906d400340
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,array并且&array具有相同的价值.但是pArray并且&pArray有不同的价值.如果数组与指针相同,则数组的地址应与数组不同.怎么可能array&array是一样的?如果array&array相同,保存数组值的内存的地址是什么?

c++ arrays pointers

51
推荐指数
1
解决办法
3258
查看次数

数组本身的名称,存储在哪里

数组的名称如何存储在内存中?

例如,如果我写:

char arr[10];
Run Code Online (Sandbox Code Playgroud)

数组项从虚拟地址开始存储在内存中,虚拟地址&arr[0]实际上是arr的值,但是它arr自己存储在哪里?

静态多维数组的行也是如此:

char arr[10][20];
Run Code Online (Sandbox Code Playgroud)

arr本身也是arr [0],arr [1] .... arr [9]都没有地址本身.

那么名称存储在哪里?

c memory-management

3
推荐指数
1
解决办法
590
查看次数