例如:
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即将到达下一个正确的位置?
作为这个问题的标题?有什么不同?
如果我写:
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)
而且似乎不是正确的代码.我认为它可以给我我想要的东西.但事实并非如此.
对不起,线路上方的模棱两可.我是新手,我不是那可能是编译器优化.