C语言 字符数组和字符串指针的理解

总感觉自己还不大清楚,有点模糊,专门写了个,来加深印象;

关于字符串和指针的理解
#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]);
}

输出结果:

C语言 <wbr>字符数组和字符串指针的理解

从结果中就可以很好理解了;

    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等则是对应类型的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值