第三次作业

一、学习内容: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是什么意思

 解决:观看视频。复制时,地址所存内容的长度是不包含结尾的‘ \0 ’,所以要+1。

   问题:字符串搜索函数中,char *ctrchr(const char *s,int h);寻找字符串hello中的' h ',为什么结果是' llo '

 解决:观看视频。函数最后返回了一个指向‘ l ’的指针,从‘ l ’开始把后面的内容当作一个字符串输出了。

二、PTA作业

问题:\0是什么

解决:上网搜索得知。'\0'是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()

 

posted @ 2020-03-15 18:02  程晨cc  阅读(135)  评论(2编辑  收藏  举报