我仍然是C ++的新手,我对这样的事情感到非常困惑:
int main()
{
char* aCharPointer = "A bunch of characters";
return 0;
}
为什么你能用字符指针做到这一点?也许还有另一个地方有答案,但我不知道在哪里看或我在寻找什么。 谢谢你的时间。
答案 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";
的作用是在堆栈上创建指向该字符串文字的指针。
由于p
指向一个常量,原始定义将是const char *p = "LITERAL";
但是,为了向后兼容许多现有的C代码,可以使用以前的定义形式。