【发布时间】:2021-12-05 02:57:37
【问题描述】:
我对 C 处理字符串的方式以及 char * 与 char[] 的方式感到困惑。
char name[10] = "asd";
printf("%p\n%p", &name, &name[0]); //0x7ffed617acd
//0x7ffed617acd
如果这段代码为两个参数提供了相同的地址,这是否意味着 C 编译器将 char 数组(字符串)作为指向数组中第一个 char 的指针并在内存中移动直到它得到空终止符?如果我们将char name[] 更改为char *name,为什么不会发生同样的情况? (我知道它们有所不同,但是是什么让 C 以不同的方式看待两者?)
我知道数组在声明后不能被赋值(除非你使用了类似 strcpy、strcat 的东西),这也让人困惑。为什么 C 不将它们视为任何其他数据类型? (有些东西告诉我编译器有一个特定的地址,而你可以将char* 分配给内存中的任何位置,因为它是一个指针)。
我知道char * 具有固定大小,这与char[] 不同,这使得char * 不能用于strcat 的第一个参数。
【问题讨论】: