gpt4 book ai didi

c++ - 数组的指针,那个数组的每个元素的内存空间信息存放在哪里?

转载 作者:太空狗 更新时间:2023-10-29 23:44:30 24 4
gpt4 key购买 nike

例如:

int *p;
int a[2] = {1, 2};
p1 = a;

我想知道c++把每个元素的内存空间信息存放在哪里?我的意思是,当我这样做时:

cout << p << endl;

我只能得到那个数组的内存地址,显然没有关于单个元素“内存长度”的信息。但是我认为应该有一些地方可以让语言引用每个元素的内存空间。因为如果我继续打电话:

cout << *++p << endl;

不管那个数组是什么类型的元素,以及单个元素对应的内存空间,我都能得到那个数组的第二个元素。该语言能够自动跳过特定的内存空间以获得下一个元素的正确起始位置及其地址。

那么,我的问题又是:该数组中元素的内存空间信息存储在哪里?或者在每个元素的末尾是否有类似 "\0" 的东西来表示该数组中一个元素的结尾,所以 *++p 即将得到到下一个正确的地方?

最佳答案

where does the information of memory space of each element of that array store?

当您使用时:

int *p;
int a[2] = {1, 2};
p = a;

a 的元素的内存在堆栈中。他们的内存是连续的。 p 指向a的第一个元素。

关于:

I can get the second element of that array no matter what type of element in that array and the corresponding space of memory of single element. The language is able to automatically kind of jump over the certain space memory to get the right start place of the next element and its address.

是的,这是正确的。

从纯数值的角度来看,

p+1 == p + sizeof(*p)

sizeof(*p) 可以在编译时计算。不需要任何运行时信息。不需要标记来表示元素的结束。

关于c++ - 数组的指针,那个数组的每个元素的内存空间信息存放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29214189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com