S1E10
@FishCchar *name = “FishC” 应该不与 char name[] = {‘F’, ‘i’, ‘s’, ‘h’, ‘C’, ‘\0’} 等价吧,前者是字符指针啊 是的,你说得对。虽然`char *name = "FishC"`和`char name[] = {'F', 'i', 's', 'h', 'C', '\0'}`都可以表示一个字符串,但它们在存储方式和使用上还是有一些差别的。
`char *name = "FishC"`创建了一个指向常量字符串的指针,其中的字符数据存储在只读内存区,不能修改。你可以通过该指针访问字符串中的字符,但是不能修改它们。
而`char name[] = {'F', 'i', 's', 'h', 'C', '\0'}`是创建了一个字符数组,并将相应的字符逐个拷贝到数组中。这种方式创建的字符串是可修改的,你可以通过修改数组中的元素来改变字符串的内容。
下面是两种方式的实例代码:
#include <stdio.h>
int main()
{
char *name = "FishC";
printf("%s\n", name);// 输出 FishC
char name2[] = {'F', 'i', 's', 'h', 'C', '\0'};
printf("%s\n", name2);// 输出 FishC
return 0;
}
在这个例子中,我们通过`printf`函数输出了两个字符串,结果是一样的。但是如果你尝试修改`name`指针指向的字符串的内容,就会出现问题:`name = 'B'`将会导致程序崩溃或出现未定义行为。所以,如果你要修改字符串的内容,请使用字符数组。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 本帖最后由 jackz007 于 2023-12-9 23:37 编辑
char * name = "FishC" ; /* name 是指针变量,既然是变量,就会占用变量空间(指针本身),就可以接受改变,就是说,可以被赋值 */
char name[] = {'F' , 'i' , 's' , 'h' , 'C' , '\0'} ;/* name 是常量指针,既然是常量,那就不会占用变量空间(指针本身),就不能被改变,就是说,不可以对其赋值 */ jackz007 发表于 2023-12-9 23:33
前者是常量指针吧,后者是字符数组
页:
[1]