小编Z_J*_*Z_J的帖子

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

例如:

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即将到达下一个正确的位置?

c++ arrays pointers

2
推荐指数
1
解决办法
89
查看次数

空字符串和'\ 0'字符之间有什么区别?(从指针和数组的角度来看)

作为这个问题的标题?有什么不同?

如果我写:

char *cp = "a";
cout << (cp == "a") << endl;
Run Code Online (Sandbox Code Playgroud)

要么:

string str = "a";
cout << (str == "a") << endl;
Run Code Online (Sandbox Code Playgroud)

它们是相同的,都归于真.但如果我写:

char *cp = "";
cout << (cp == "\0") << endl;
Run Code Online (Sandbox Code Playgroud)

它返回false.但:

string str = "";
cout << (str == "\0") << endl;
Run Code Online (Sandbox Code Playgroud)

它返回true.

我认为它们应该从指针和数组的角度来看是一样的.但事实证明它们是不同的.他们之间有什么微妙的区别?我应该如何编写一个char数组来表示一个空字符串?


好吧,上面的内容可能不清楚,就像有人说它可能是"编译器优化".

我真正想要的是这个:

char *cp = "abcd";
Run Code Online (Sandbox Code Playgroud)

可以给我一个像这样的数组:['a','b','c','d','\ 0'].我想知道如何使用类似的语法来获得这样的数组:['\ 0'].因为我试过:

char *cp = "";
Run Code Online (Sandbox Code Playgroud)

而且似乎不是正确的代码.我认为它可以给我我想要的东西.但事实并非如此.

对不起,线路上方的模棱两可.我是新手,我不是那可能是编译器优化.

c++ arrays pointers char

0
推荐指数
2
解决办法
1716
查看次数

标签 统计

arrays ×2

c++ ×2

pointers ×2

char ×1