c语言指针字符串体会

这是我学习字符串指针的一些小体会,有错的话请指正(这个很简单的)。

定义:我们可以定义字符串指针如:char *a="hello";但不能用定义字符指针如:char*a='a';这是因为在储存字符串时,内存会用数组的方式定义字符串,而处理单个字符时,会将其处理为ASC码表对应的数值,所以就是给a赋值。但是还是可以定义为:char *a="h";此时我们就将h视为一个字符的字符串来处理。还有一个很细节的问题,定义char*a="hello"时,就相当于char*a;a="hello";为什么可以直接让指针等于字符串呢?仅就我个人理解,可以先认为char b[ ]={"hello"};可以简化为char b[ ]="hello";b相当于一个指向字符串开始地址的指针。所以char*a="hello",就可以理解为a是字符串开始的地址。所以定义字符串数组指针的赋值就很好理解了。如:char*a[ 2];a[0]="hello";a[1]="world";就可以这么写了。

储存:内存地址是以字节为单位的,所以字符串中的每个字符会占用一个地址,就是8个bit,用8个比特代表的数值表示对应的字符。如果指针p指向字符串开始,就可以用p+1,代表下一个字符的地址(p值为地址)。最后会用一个0字符来表示结束。

输出:以最简单的printf为例,如果我们定义char*a="hello"时,怎样用printf将其输出,printf("%s",*a)的方法是错的,此时不能带*,这里我一直很疑惑,难道不应该输出指针所对应的值么,那为什么不能用*去读取地址里面的值呢?因为*a读取的是a的地址所对应的值,a只是一个开始地址而已,并不是整个字符串的地址,所以不可能输出整个字符串。正确的是printf("%s",a),,此时就会从a开始,以字符串的方式输出,直到整个字符串结束。

补充一个我写程序时犯得错误:

定义一个char时,什么时候该写成char a='0';什么时候写成char a=0;这两者有本质的区别,'0'对应ASC表为48,所以char a='0'实际上电脑会将其与char a=48 等价处理。那char做加减乘除时有什么区别么?char a='0'可以做算数运算么?其实是可以的只不过此时等价于char a=48做运算,最后也可以将其输出为字符。char a='28'以字符的格式输出会得到什么呢?就只有8,因为字符28会分解为'2'和'8',而'8'会掩盖'2',因为a只能代表一个字符。如果是char a=28,以字符的格式输出,自然会输出其ASC码表对应的字符。所以还是有本质的区别的。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值