C++指针和数组基础
C++ pointer and array basics
代码:
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
char testChar[] = {'a','b','c'};
char *testPointer = testChar ;
cout << testPointer << endl;
return 0;
}
问题:
当我使用cout << mypointer
,
- 为什么要打印数组的每一个字母,乱七八糟的(参考
最后输出)?我的假设是当我看到指针时
指向第一个字母然后打印第二个然后等等
在最后打印内容。
- 末尾乱七八糟的(参考输出),地址是什么?
评论:
- 我知道在数组的末尾应该是一个空指针吧?
- 一年前学的,忘记了请帮我回忆一下是怎么回事。
输出:
abc 310 367 277_ 377
Program ended with exit code: 0
当打印出一个字符串(或你的情况下的 char 数组)时,它必须以空字符终止 [=10=]
,否则 cout
将继续打印出位于内存中超过预期的字符串,直到它遇到空字符,或者它访问不允许读取的内存,这会导致分段错误。
正在打印的末尾的 "mess" 是位于紧靠 char 数组之后的内存位置中的值。
此外,在初始化 char testChar[] = "abc";
之后,您实际上不需要 'char *testPointer = testChar' 语句,因为 testChar 本身就是数组第一个元素的地址。所以 cout << testChar << endl;
就可以了。
代码:
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
char testChar[] = {'a','b','c'};
char *testPointer = testChar ;
cout << testPointer << endl;
return 0;
}
问题:
当我使用cout << mypointer
,
- 为什么要打印数组的每一个字母,乱七八糟的(参考 最后输出)?我的假设是当我看到指针时 指向第一个字母然后打印第二个然后等等 在最后打印内容。
- 末尾乱七八糟的(参考输出),地址是什么?
评论:
- 我知道在数组的末尾应该是一个空指针吧?
- 一年前学的,忘记了请帮我回忆一下是怎么回事。
输出:
abc 310 367 277_ 377
Program ended with exit code: 0
当打印出一个字符串(或你的情况下的 char 数组)时,它必须以空字符终止 [=10=]
,否则 cout
将继续打印出位于内存中超过预期的字符串,直到它遇到空字符,或者它访问不允许读取的内存,这会导致分段错误。
正在打印的末尾的 "mess" 是位于紧靠 char 数组之后的内存位置中的值。
此外,在初始化 char testChar[] = "abc";
之后,您实际上不需要 'char *testPointer = testChar' 语句,因为 testChar 本身就是数组第一个元素的地址。所以 cout << testChar << endl;
就可以了。