关于C ++字符指针的问题

时间:2011-08-08 01:28:16

标签: c++ string pointers character

我仍然是C ++的新手,我对这样的事情感到非常困惑:

int main()
    {
         char* aCharPointer = "A bunch of characters";
         return 0;
    }

为什么你能用字符指针做到这一点?也许还有另一个地方有答案,但我不知道在哪里看或我在寻找什么。 谢谢你的时间。

3 个答案:

答案 0 :(得分:3)

这与C中的字符串有关(并且没有错,这是一个C字符串)。字符串是一个字符数组。以下代码:

char* txt = "Hello";

生成以下字符数组:

H|e|l|l|o|\0

并且txt指向第一个元素。最后一个元素是一个空终止符,它是使用字符串的任何东西知道字符串已经结束的方式。

作为旁注,C和C ++中的指针可以指向单个项目,也可以指向相同类型的项目数组。没有办法只是通过查看它来知道它是什么,但是通过约定,如果你看到char*赔率非常好,那就是一个字符串。

因此它一直都是如此。阿门。

如果您想知道如何制作C ++字符串,请使用std::string类。

答案 1 :(得分:2)

这是一个C风格的字符串,这意味着它实际上是一个字符数组,在字符串的末尾有一个空(ASCII代码0)字符,表示它是结束(编译器在你输入它时它看到字面意思。)

字符指针指向数组中的第一个字符(这是因为只要上下文需要数组decay into pointers)。

指针可以应用p[i]下标语法,这与说*(p + i)相同。这是在给定指向第一个元素的指针的情况下访问数组的i元素的常用习惯用法。

使用这些事实,您可以通过这种方式遍历数组中的所有字符:

// '\0' is the null character
for (int i = 0; aCharPointer[i] != '\0'; ++i) {
    // Do something with aCharPointer[i]
}

或者这样:

for (char *p = aCharPointer; *p != '\0'; ++p) {
    // Do something with *p
}

您还可以调用一个需要指向C风格字符串的字符指针的函数:

#include <cstring>
size_t lengthOfString = strlen(aCharPointer);

当然,您也可以手动取消引用指针:

assert(*aCharPointer == 'A');

答案 2 :(得分:2)

你可以做什么?

“一堆字符”string literal。字符串文字在程序的常量部分静态分配。 char *p = "LITERAL";的作用是在堆栈上创建指向该字符串文字的指针。

enter image description here

由于p指向一个常量,原始定义将是const char *p = "LITERAL";但是,为了向后兼容许多现有的C代码,可以使用以前的定义形式。