数组的指针,该数组的每个元素的内存空间信息存储在哪里?

Z_J*_*Z_J 2 c++ arrays pointers

例如:

int *p;
int a[2] = {1, 2};
p1 = a;
Run Code Online (Sandbox Code Playgroud)

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

cout << p << endl;
Run Code Online (Sandbox Code Playgroud)

我只能获得该数组的内存地址,显然没有与单个元素的"内存长度"相关的信息.但我认为应该有一些语言可以引用每个元素的内存空间.因为如果我继续这个电话:

cout << *++p << endl;
Run Code Online (Sandbox Code Playgroud)

无论该数组中的哪种元素类型以及单个元素的相应内存空间,我都可以得到该数组的第二个元素.该语言能够自动跳过某个空间内存,以获得下一个元素及其地址的正确起始位置.

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

R S*_*ahu 6

该数组的每个元素的内存空间信息存储在哪里?

当你使用:

int *p;
int a[2] = {1, 2};
p = a;
Run Code Online (Sandbox Code Playgroud)

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

关于:

无论该数组中的哪种元素类型以及单个元素的相应内存空间,我都可以得到该数组的第二个元素.该语言能够自动跳过某个空间内存,以获得下一个元素及其地址的正确起始位置.

对,那是正确的.

从纯数字的角度来看,

p+1 == p + sizeof(*p)
Run Code Online (Sandbox Code Playgroud)

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