我有一个简单的问题,我怎么能声明一个指向单个字符的字符指针。
是char*
可以指向单个字符还是指向字符串。如果我错了,请纠正我。
答案 0 :(得分:5)
在C中没有数据类型string
。
C-“string”是简单的char
- 带有数组元素的数组,其值为'\0'
(0
- 终结符)以标记“字符串的结尾”。
一个char*
始终引用char
,char
之后是否有更多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''。