C char数组中的奇数

Elb*_*ira 4 c arrays pointers

当我搞乱C阵列时,我偶然发现了这个奇怪的结果:

char s[100] = "hello";
if(s == &s[0]) printf("true. ");
if(s == &s) printf("true.");
// output: true. true.
Run Code Online (Sandbox Code Playgroud)

我知道它s保存了第一个元素的内存位置,但有没有办法找到s(指向第一个元素的指针的地址)的地址?为什么&s相等s?并不是说这很有用,但我想知道幕后发生了什么.

我不确定不同的编译器是否以不同的方式实现它,但我使用的是gcc.

dkr*_*etz 10

如果我告诉你把手指放在内存中字符数组s所在的位置,然后是数组中第一个字符所在的位置,那么它们不一样吗?


Eri*_*ler 9

那是因为s不是指针,而是数组.必要时(如strcpy等),数组会自动转换为指针,但不存在"指向第一个元素的指针的地址".s只是堆栈上的100个字节; 只要需要指针,编译器就会将这100个字节的地址传递给函数调用.