指针进阶
一、书本学习
1、手写笔记
2、代码列表
3、存在的问题
①、指针数组和二维数组的区别(指针数组是二级指针,二维数组是连续的内存单元)
结果:二维数组其实是数组的数组,也就是连续内存单元的连续内存单元,纵横坐标足够大的话,可以占用非常大的空间,且二维数组的列长度确定,当数组元素长度不等时可能造成内存浪费;
指针数组是指向字符串的指针,本身并不具有储存字符串的空间,需要现给其一个指向,才能将字符串储存到相应的位置,故不存在上述内存浪费现象。
②、在以命令方式运行程序时 '.\' 的作用是什么?
结果:系统原因,不同系统要求不同。
③、在运用指针数组解密藏头诗中对如下程序不理解
结果:在GBK编码中汉字占用2字节,在UTF-16编码通常汉字占两个字节,若该程序使用两种编码中一种,则poem[i]+1==poem[i]+sizeof(char) 既poem[i]与poem[i]+1代表一个汉字保存到mean[2i]与mean[2i]+1中。
二、PTA题目
1、PTA1-1:int (*p)[4]它表示p是一个指针数组,它包含4个指针变量元素。T/F
结果:以上定义涉及两个运算符:“*”(间接引用)、“[]”(下标),“[]”的优先级别大于“*”的优先级别。int (*q)[4]首先是个指针,即*q,剩下的“int [4]”作为补充说明,即说明指针q指向一个长度为4的数组。
答案:F
2、PTA2-1以下哪个定义中的p
不是指针,请选择恰当的选项:
A.char **p;
B.char (*p)[10];
C.char *p[6];
D.给出的三项中,p
都是指针
结果:A为一个二级指针。B.char (*q)[6]首先是个指针,即*q,剩下的“char [6]”作为补充说明,即说明指针q指向一个长度为6的数组。C.char*p[6],“[]”的优先级别高,所以它首先是个大小为6的数组,即p[6];剩下的“int *”作为补充说明,即说明该数组的每一个元素为指向一个字符类型的指针。
答案:C
3、运用3种方式实现strcpy——PTA3-4
①运用strlen实现strcat
②运用for语句实现strcat
③运用while语句实现strcat