一、学习内容:1.2.2动态内存的分配、1.3.1单字符输入输出、1.3.2字符串数组、1.4
1.观看视频:1.2.2,1.3.1,1.3.2,1.4
2.代码列表
3.手写笔记
4.问题
问题:a[][]二维数组
解决:二维数组是一维数组的数组,对二维数组a来说,它的元素a[1]就是下标为1的一行数据,是个一维数组,而a[1]作为这个一维数组的名字,其实就是指向数组第一个元素的指针,即这一行的首地址。a[1]+1即a[1][1]的地址,因此*(a[1]+1)即间接访问a[1][1]。
问题:malloc
解决:malloc分配的内存大小至少为size参数所指定的字节数。当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以通过类型转换强制转换为任何其它类型的指针。以上为视频和百度得知,都还不太明白。
问题:size_t strlen(const char *s)中为什么有const
解决:观看视频。因为要保证函数不会修改字符串。
问题:比较两个字符串不可以直接用指针比较的原因
解决:观看视频。两个数组直接相互比较的是他们的地址,因此不可能相同。
问题:函数strcpy为什么要返回dst
解决:观看视频。需要让strcpy的结果能够再次参与其他运算。
问题:malloc (strlen(src)+1)中的+1是什么意思
解决:观看视频。复制时,地址所存内容的长度是不包含结尾的‘ ’,所以要+1。
问题:字符串搜索函数中,char *ctrchr(const char *s,int h);寻找字符串hello中的' h ',为什么结果是' llo '
解决:观看视频。函数最后返回了一个指向‘ l ’的指针,从‘ l ’开始把后面的内容当作一个字符串输出了。
二、PTA作业
问题: 是什么
解决:上网搜索得知。' '
是ASCII码表中的第0个字符,称为空字符。该字符既不能显示,也不是控制字符,输出该字符不会有任何效果,它在C语言中仅作为字符串的结束标志。
问题:
解决:str是该数组的数组名字,而且str还是该数组的首地址,但str是一个指针常量,它是不能被赋值的也不能进行自增自减的。
问题:
解决:网上搜索。puts()和gets()是针对字符串的输出和读入,相对应的是printf和scanf是对单个字符的操作。
课堂补充:
1.组的方式定义字符串,所有的数据放在数据区,而指针的方式定义字符串则在代码区。数据区和代码区的区别:代码区整个运行过程不可改变,数据区可改变。
2.字符数组与字符指针的重要区别:
char sa[]="array"; char *sp=="array";
sp指向的字符不可改变,而sa中的字符可改变。sp可指向别的字符串,sa是数组首元素地址,是常量,无法指向别的字符串。
修改sa的方法:sa[0]='A',修改单个字符,还有strcpy(sa,"hello")
3.字符串的输入和输出 :
输入字符串:scanf()或gets()
输出字符串:printf()或puts()