Char* pointers and char[]

Char* pointers and char[]

本文关键字:char and pointers Char      更新时间:2023-10-16

我正在C++中学习指针,在int*、double*等方面做得很好,但后来我尝试了一些我无法理解的东西。我已经附上了我的代码段,注释是终端输出。

char word[] = "Hello there";
    cout << word << endl; //Hello there
    cout << *word << endl; //H
    cout << &word << endl; //Address
    char *wordpt = word;
    cout << wordpt << endl; //Hello there
    cout << *wordpt << endl; //H
    cout << &wordpt << endl; //Address
    wordpt = &word[0];
    cout << wordpt << endl; //Hello there
    cout << *wordpt << endl; //H
    cout << &wordpt << endl; //Address

这些是怎么回事?我甚至不明白contents of word*word)怎么可能是一个单独的索引。word是如何存储在内存中的?为什么wordpt允许我给它一个值word,这不是一个地址?

第一种情况下的指针wordpt指向数组word的第一个元素,第二个赋值完全相同,但显式。

数组会自动转换为指向其第一个元素的指针,这是由c标准指定的,该标准也适用于c++。

让您感到困惑的是,cout会自动打印char *指针的内容,而不是指针指向的地址。要做到这一点,有一个要求,指向的数据必须是一个c字符串,即一个非nul字节的序列,后面跟着一个nul字节,这就是存储在word中的内容。

因此cout正在访问wordpt指针所指向的数据。