#include <stdio.h>
int main()
{
char str[80];
printf("Enter the string:");
scanf("%s", &str[0]);
printf("%d", &str[0]);
printf("%d", &str);
printf("%d", str);
printf("You entered:%s\n",str);
return 0;
}
输出
Enter the string:-1081426336-1081426336-1081426336You entered:wefwq
str和&str[0]可以理解,但是为什么str和&str效果是一样的呢?
str是代表数组的首地址。
&str是行指针,此时的类型发生了变化,即 char (*str)[]
&str是行指针,类型发生了变化。所以效果一样
- &str[0]表示数组首元素的地址;
- str表示数组首元素的地址;
- &str表示数组的首地址;
这两个地址的指向的内存是同一个地方,当你以%d输出时,取出的内容就是(地址)~(地址+偏移)这一片内存中的内容。所以输出效果是一样的。
C中有很多细节需要了解C编译器怎么解释的,要细细品味。
这是指针的一个特殊情况:
编译器会将数组名当作数组首元素的地址
两个指针代表的含义不一样,可以通过sizeof(XX)来判断指针代表的意义