c语言指针字符串体会
来源:互联网 发布:淘宝7个层级流量怎么样 编辑:程序博客网 时间:2024/05/16 14:46
这是我学习字符串指针的一些小体会,有错的话请指正(这个很简单的)。
定义:我们可以定义字符串指针如: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码表对应的字符。所以还是有本质的区别的。
- c语言指针字符串体会
- C语言字符串指针
- C语言 字符串指针初始化
- C语言字符串的指针
- c语言编程--字符串指针
- C语言-指针和字符串
- C语言:字符串与指针
- C语言—字符串、指针
- c语言字符串与指针
- C语言 指针和字符串
- c语言字符、字符串、指针
- C语言指针 字符串 内存
- c语言-指针和字符串
- 学习C语言指针和链表的体会
- C语言指针-----指针与字符串
- c语言:字符串与字符串指针变量
- C语言基础:C语言指针(6) - 指针和字符串
- C语言字符串指针(指向字符串的指针)
- spring所有版本jar包免费下载
- 期末复习概述
- 如果CEO只给你1个月时间,如何完成从0到1
- linux IANA分配的端口列表
- 论文阅读笔记:DeepRadiologyNet: Radiologist Level Pathology Detection in CT Head Images
- c语言指针字符串体会
- SDUT-3398 数据结构实验之排序一:一趟快排(水题)
- 利用.vcf文件创建手机通讯录文件并导入
- 人工智能的核心和底层是什么?你知道吗?
- vnc远程工具的使用教程
- APP测试要点
- 存储总量达 20T 的 MySQL 实例,如何完成迁移?
- linux的SHELL编程
- js处理数据的一些方法