const char *是指向单个字符还是字符串?

时间:2014-05-08 12:31:26

标签: c++ c string pointers char

我有一个简单的问题,我怎么能声明一个指向单个字符的字符指针。

char*可以指向单个字符还是指向字符串。如果我错了,请纠正我。

7 个答案:

答案 0 :(得分:5)

在C中没有数据类型string

C-“string”是简单的char - 带有数组元素的数组,其值为'\0'0 - 终结符)以标记“字符串的结尾”。

一个char* 始终引用charchar之后是否有更多char s“跟随”不明显 - 指针本身,但仅限于指针的设置方式。

char c1 = 'A';
char * p1 = &c1; /* p1 points to exctly one char. */
char * p2 = malloc(42); /* If malloc did not fail p2 points to 42 chars, else p2 would be NULL. */
char str1[4] = "alk";
char * p3 = str1; /* p3 points to 3 + 1 = 4 chars (3 for the chars 'a', 'l', 'k' and 1 for the trailing 0-terminator. */

答案 1 :(得分:1)

是的,它可以指向一个角色。它也可以指向一个字符串。这取决于你如何使用它。

例如:

char str[] = "ABCDEFG";
const char *a = str + 2;

我们可以说“a指向单个字符'C'”而“a指向字符串'CDEFG'”。

printf("%c", *a);打印“C”,而printf("%s", a);打印“CDEFG”。

答案 2 :(得分:0)

他们两个。它指向内存的一部分,它只能包含一个或多个元素。取决于您的使用情况。

char *x = (char*) malloc(1 ); // Just one

char *x = (char*) malloc(10); // A sequence of characters (string)

实际上一个指针包含一个地址,C或C ++会让你自由地使用它。如果您在*x之前使用它,则将其作为单个字符引用,并且x本身可以定义为字符串的第一个字符(直到C样式字符串中的\0)< / p>

答案 3 :(得分:0)

没有区别。指针只包含某些数据的地址,没有与指针关联的“目标元素计数”。

这不是特定于char *(字符/字符串)指针,它适用于所有指针。

只要有指针,就可以使用它作为索引的基础,就像指针指向数组一样。

答案 4 :(得分:0)

它指向一些内存地址。它可以是char的一个元素,也可以是数组中的第一个元素 - 此数组是字符串。因此索引将偏离第一个元素。

答案 5 :(得分:0)

字符串只是由\0字符终止的字符序列。 指针只保存变量的地址;它可以是任何东西。

即使你将char *分配给sting,如果你得到它的值,你仍然只会得到一个字符(但是如果你使用字符串操作方法,你将对整个字符串进行操作函数查找\0终止。

答案 6 :(得分:0)

任何指针指向一个对象。指针引用的对象类型在指针声明中指定。

所以例如

const char *p = "ABCD";

指向char类型的一个对象(不是对象)。也就是它指向字符串文字的第一个字符&#34; ABCD&#34;。考虑到字符串文字本身的类型是const char[5],它是一个数组,而不是一个字符。在这种情况下,指针指向的字符就是字符串文字的一部分。因此,您可以使用它(例如通过递增)来访问文字的其他字符。

另外,我会在帖子中添加指向函数的指针。

C标准中有一个很好的相关引用

  

指针类型可以从函数类型或对象类型派生,   称为引用类型。指针类型描述对象   其值提供对引用类型的实体的引用。   有时会调用从引用类型T派生的指针类型   ''指向T''。