我试图理解C语言中的指针。
char *name = "HASAN";
当我用char *存储 "HASAN "时,该字符串作为一个字符数组存储在内存中的某个地方,我可以通过将 "name "作为一个数组来访问该字符串中的每一个字符。
//second character of HASAN is A.
printf("%c", name[1]);
但是我知道 "name "只是一个指针,它存储了字符串 "HASAN "的第一个字符'A'的地址。所以,"name "这个指针怎么能像一个数组一样呢?
这很简单。
正如标准所说。
*(name + N) == name[N]
而这并不重要 name
被声明为数组衰减为指针。
char *name = "HASAN";
或
char name[] = "HASAN";
考虑以下两个例子。
char arr[] = "HASAN"; // array
它连续分配了6个字节的内存,并将第一个分配的字节的地址与以下内容关联起来: arr
.
另一方面:
char ptr* = "HASAN"; // pointer
指针变量 ptr*
为变量连续存储6个字节 和 4个额外的字节用于指针变量本身,并将字符串字面的地址分配给了 ptr
. 因此,在这种情况下,共分配了10个字节。