C++指针和数组基础知识



代码:

#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时,

  1. 为什么要打印数组的每个字母和混乱(请参阅输出)?我的假设是当我看到指针时指向第一个字母打印,然后指向第二个字母,等等打印最后的东西
  2. 结尾的混乱(指输出)是什么,地址是什么

评论:

  • 我知道在数组的末尾应该有一个空指针,对吧
  • 我一年前就学会了,忘了请帮我回忆一下发生了什么

输出:

abc 310 367 277_ 377   
Program ended with exit code: 0

打印字符串(在您的情况下是char数组)时,它必须以空字符终止,否则cout将继续打印内存中超过预期字符串的字符,直到它遇到空字符,或者访问不允许读取的内存,从而导致分段错误。

打印的末尾的"混乱"是位于char数组后面的内存位置中的值。

此外,在初始化char testChar[] = "abc";之后,您实际上不需要"char*testPointer=testChar"语句,因为testChar本身就是数组第一个元素的地址。所以cout << testChar << endl;可以。

最新更新