0.展示PTA总分
1.本章学习总结
1.1学习内容总结
1.指针做循环变量做法
基本做法如下:
int a[10]; int *p; p=a;//指针指向a数组的首地址 fgets(a,10,stdin); for(p=a;*p!='0'&&*p!='\n',p++) { 循环结构; }
2.字符指针如何表示字符串
基本做法如下:
char str[]="abc"; char *p; for(p=str;*p!='0'&&*p!='\n',p++) { 循环结构; }
3.动态内存分配
1.动态内存分配的步骤
(1)了解需要多少内存空间。
(2)利用C语言提供的动态分配函数来分配所需要的储存空间。
(3)使指针指向获得的内存空间,以便用指针在该空间内实施运算或操作。
(4)当使用完毕内存后,释放这一空间。
2.动态存储分配函数
1.malloc()
函数原型是 : void * malloc(unsigned size)
2.calloc()
函数原型是 : void * calloc(unsigned n,unsigned size)
两者的区别仅在于calloc函数在分配后还把存储块里全部初始化为0,而malloc函数不会。
3.动态存储释放函数free()
函数原型为 : void free (void * ptr)
这个函数十分关键却又经常被人遗忘,故最好在使用动态存储分配函数时,自动先在后面补上free函数。
4.指针数组及其应用
1.指针数组的定义
一维指针数组定义的一般格式为:类型名 *数组名[数组长度];
如 char * color [5];
2.指针数组的应用
可以用指针数组处理多个字符串
如课本P269页char*pcolor[]={“red","blue","yellow","green","black"};
4.二级指针、行指针
1.二级指针
二级指针,也称指向指针,一般定义为:
类型名**变量名;
2.行指针
行指针出现在二维数组中
如二维数组a[2][3];
a[0]代表的是二维数组第零行的首地址相当于&a[0][0];
a[1]代表的是二维数组第一行的首地址相当于&a[1][0];
a[0]+1代表的是二维数组第零行,第一列的地址相当于&a[0][1];
5.函数返回值为指针
当函数返回值的类型是指针时,要返回某个指针,不过要注意的是,不能在实现函数时返回在函数内部定义的局部数据对象的地址,
这是因为所有的局部数据对象在函数返回时就会消亡,其值不再有效。
1.2本章学习体会
1.由于最近各种考试扑面而来,有点顾不上C的学习,导致PTA也没怎么刷,现在线代已经考完了,接下来会全力投入C的学习当中。
2.这两周的代码量:334行。
2.PTA实验作业
2.1 6-7 输出月份英文名
2.1.1 伪代码
定义一个指针数组months[13]; months[0]表示wrong input!,其余的分别表示月份 if (n < 1或n>12)n = 0;end if; return 英文月份;
2.1.2代码截图
2.1.3总结本题的知识点
这题是指针数组的简单运用,但一开始我的做法不是指针数组,而是用二维数组,但是后来发现二维数组是在函数内部定义的,函数结束时,它的生存期只在函数内部,所以不能用二维数组。
2.1.4PTA提交列表及说明
1.部分正确:使用的是二维数组,如上总结,本题不能使用二维数组,要用指针数组。
2.2 6-2 jmu-c-二分查找
2.2.1 伪代码
定义左右端点和中间点left,right,mid; while(left<=right) mid = (left + right) / 2;//二分 (*count)++; if (中间值=key])return mid;end if else if (中间值>key)right = mid - 1;end else if else left = mid + 1;end else }
2.2.2代码截图
2.2.3总结本题的知识点
形参*count
是一个指针,函数中不能像之前那样count++,而是要(*count)++
;
2.2.4PTA提交列表及说明
答案错误:一开始写的是*count++,没有括号,后来发现及时改正。
2.3.1