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即将到达下一个正确的位置?
该数组的每个元素的内存空间信息存储在哪里?
当你使用:
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)可以在编译时计算.不需要任何运行时信息.标记不需要表示元素的结尾.
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |