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