c 语言 字符串和 数组

char * a = "abc";
char a[4] = "abc";
以上有什么区别和联系

 

strcat函数
    strcat函数用于连结两个字符串。一般形式是:
        strcat(字符串1,字符串2);
&n......
答案就在这里:关于C语言字符串数组
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

第一个的"abc"是常量,一个数组型指针a指向这个常量。
第二个是的"abc"是变量,是申请了一个4个元素的数组变量,将这个数组变量分别赋值为abc\0

char * a = "abc";
其实是

char 一个你看不见的变量[] = "abc";
char *a =  一个你看不见的变量;

前者是一个字符指针,定义时仅分配了指针变量的空间,该指针指向一个字符串常量“abc”的首地址,a可修改(可做左值)但a[i]是不允许修改的。
后者是一个字符数组,定义时已经分配了空间并初始化为"abc",此时a不可修改但a[i]可修改。
但是引用数组内容时,以上两者a[i]值是相同的。

char * a = "abc"; 指向常量字符串,只分配了 4 个字节的指针地址,不可以修改 a 中字符串的内容
char a[4] = "abc"; 为 a 分配了空间,可以修改 a 中字符串的内容