指向字符串的指针、字符数组和指向字符数组的指针的比较
向所有程序员问好,我无法理解一些东西
第一个问题是为什么我们不能修改 2,例如b[0]='m',我知道 2 被存储为编译时常量但我不明白它是什么意思以及 2 的 quiddity 是什么?
第二个问题:
3.
char a[]="hello";
char* c=a;
c[0]='r';
现在我们可以修改然后打印c,但是我们不能修改 2 !为什么?
我无法理解这些指针的概念,请向我解释
回答
char a[] = "hello;"是一个以空字符结尾的字符数组,该数组将使用您指定的字符进行初始化,编译器会推导出它的大小,在这种情况下,它将有 6 个字符的空间,这些是可变的,字符被复制到数组,您可以随意更改它们。例如 a[0] = 'x'将更hello改为xello.
char* c = a;只需将指针c指向a,就可以在 中执行c与您实际操作相同的操作a。
char* b = "salam"是一种不同的动物,b是指向字符串文字的指针,这些不是要修改的,它们不会存储在数组中,例如a,它们是只读的,并且通常存储在内存的某个只读部分中,无论哪种方式编辑行为b未定义,即 b[0] = 'x'根据语言规则是非法的。