jian-qi- 发表于 2023-12-9 16:23:47

S1E10


@FishCchar *name = “FishC” 应该不与 char name[] = {‘F’, ‘i’, ‘s’, ‘h’, ‘C’, ‘\0’} 等价吧,前者是字符指针啊

FishC 发表于 2023-12-9 16:24:19

是的,你说得对。虽然`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:33:01

本帖最后由 jackz007 于 2023-12-9 23:37 编辑

char * name = "FishC" ;                               /* name 是指针变量,既然是变量,就会占用变量空间(指针本身),就可以接受改变,就是说,可以被赋值 */
char name[] = {'F' , 'i' , 's' , 'h' , 'C' , '\0'} ;/* name 是常量指针,既然是常量,那就不会占用变量空间(指针本身),就不能被改变,就是说,不可以对其赋值 */

jian-qi- 发表于 2023-12-20 20:47:49

jackz007 发表于 2023-12-9 23:33


前者是常量指针吧,后者是字符数组
页: [1]
查看完整版本: S1E10