代码及结果
#include <stdio.h>
int main()
{
char *a = "hello";
char b[] = "hello";
printf("地址 &a = %p\n", &a); //a 的地址是指针变量 a 存放的地址,与字符串无关
printf(" 值 a = %p\n", a); // a 变量的值时 字符串存放的地址,也是首元素的地址
printf("a[0] = %c\n", a[0]); // a[0] 是个元素
printf("地址 &a[0] = %p\n", &a[0]); // 元素 a[0] 存放地址
printf("&a[1] = %p\n", &a[1]); // 元素 a[0] 存放地址
puts(" ");
printf("地址 &b = %p\n", &b); // 指针常量 b 的地址,也是 b 的值
printf(" 值 b = %p\n", b); // b 的值为字符数组首元素的地址
printf("b[0] = %c\n", b[0]); // b[0] 是元素
printf("地址 &b[0] = %p\n", &b[0]); // b[0] 的地址,== b
printf("&b[1] = %p\n", &b[1]); // b[1] 的地址
puts(" ");
printf("字符串 %d\n", strlen(a)); // 字符串的长度
printf("字符数组 %d\n", strlen(b)); // 字符数组的长度
printf("指针的大小 %d\n", sizeof(a)); // 字符串的长度
printf("数组的大小 %d\n", strlen(a)); // 字符串的长度
puts(" ");
system("pause");
return 0;
}
结论
- 字符数组和字符串不是一样的
- 字符串与字符数组的 a,b 的值,都是首元素的地址
- &a 是指针本身所在的地址,&b 是数组 b 的地址(也是 b 的值,也是收元素的地址)
- b == &b == &b[0]; a == &a[0] != &a