总感觉自己还不大清楚,有点模糊,专门写了个,来加深印象;
关于字符串和指针的理解
#include "stdio.h"
void main()
{
char a[8]="crystal";
char *p="blank";
printf("&a=%x\n",&a);
printf("a=%x\n",a);
printf("&a[0]=%x\n",&a[0]);
putchar('\n\n');
printf("&p=%x\n",&p);
printf("p=%x\n",p);
printf("&p[0]=%x\n",&p[0]);
}
输出结果:
从结果中就可以很好理解了;
char a[8]="crystal";这句执行的时候,系统就为这个数组分配了长为8的内存,并命名为a,可以理解为指针a指向a[0]的,所以&a和&a[0]的值是一样的;
第二个,对于数组变量,可以使用变量名来索引变量中的内容,理解成指针,那么它的值肯定是地址,所以和上面两个也一样。
char *p="blank"; 执行之后,内存分配了两个空间,一个是指针p,一个是这个字符串,且p指向字符串的首地址,&p代表p这个指针的地址,和字符串无关;p代表指针p中的内容,也就是字符串的首地址;&p[0]代表字符串第一个元素的地址,也就是字符串的首地址,所以,最后两个一样;
指针就是一个存放地址的变量,可以理解和int,float等一样的,只是保存的类型不同而已,它的值是一个地址,int等则是对应类型的值。