0.展示PTA总分(0----2)
1.本章学习总结(2分)
1.1 学习内容总结:
- 学习了本章内容,首先要明确的是要知道什么是指针变量,按照百度百科的释义:指针变量是指存放地址的变量。因地址的改变而做出指定性质的衡量变法。这明确了指针变量的含义,它表示的不是一个值,而是一个地址,所以对指针变量进行赋值时就要注意赋值地址而不是值。
- 既然指针变量是存放地址的,然而正常使用是不会去纠结地址,那么为什么要指针变量???其实指针变量前加上*号就代表地址上的值,那为何不直接用变量而是用指针变量然后再指向变量呢??这就要提到指针的好处了:a.为函数提供修改调用变元的灵活手段;b.支持C 动态分配子程序c.可以改善某些子程序的效率>>在数据传递时,如果数据块较大(比如说数据缓冲区或比较大的结构),这时就可以使用指针传递地址而不是实际数据,即提高传输速度,又节省大量内存。d.为动态数据结构(如二叉树、链表)提供支持(好处摘自luckyone906的博客)。
- 指针的定义:
类型 *变量名
其中号必不可少,如果没有就是一般的变量;变量名的选择建议如果指向之前定义的变量可以在之前的变量名前加p作为那个变量的指针变量。 - 指针的赋值:
如果是指向变量的指针,在赋值时注意指向地址,如:int num;
int *pnum;
pnum=#
如果时指向变量数组,则直接赋值,如:int num[10];
int *pnum;
pnum=num;
此时指针pnum是num[0]的地址 - 指针做循环变量的做法:
指针做循环变量时可以定义另一个来循环,这样原指针的地址就不变,在一些情景也可以直接作为循环变量
PTA指针6-6 查找子串中我就将指针用于循环变量。
- 字符指针如何表示字符串:
1.在定义指针时对其进行初始化为一个字符串:char *s="Hello World";
2.将一个数组的首地址赋值给指针变量并对整个数组进行输出:char s[11];
char *p;
scanf("%s",&s);
输入hello world\np=s;
for(i=0;i<11;i++)
printf("%c",*(p+i));
- 动态内存分配:
一般就是使用malloc函数和calloc函数申请动态内存,使用完之后要使用free函数释放掉申请得来的空间。例如:
PTA指针6-8 计算最长的字符串长度的题干。
- 指针数组及其应用:
如果数组的各个元素都是指针类型,用于存放内存地址,那么这个数组就是指针数组。指针数组定义的一般格式为:类型名 *数组名[数组长度]。例如char *ps[10];
char s[10][10];
for(i=0;i<10;i++)
ps[i]=s[i];
- 二级指针、行指针
指向指针的指针称为二级指针,一般定义形式为:类型名 **变量名,例如:int **ppnum;
行指针是指向数组的指针,例如:int (*pnum)[10];
- 函数返回值为指针:
函数的返回值类型自然也可以是指针类型,即函数可以返回一个地址。但需要注意的是不能返回在函数内部定义的局部数据对象的地址,这些地址在函数结束时会被自动回收,从而导致返回的地址无效,因此返回指针的函数一般都返回全局数据对象的或者主调函数中数据对象的地址,例如:
PTA指针6-6 查找子串,题目要求的函数就是返回值为指针的函数。
1.2 本章学习体会:
- 学了大半个学期,也有做过一次大作业,深刻感到自己的懒惰,也发现了预习复习的重要,不懂的也慢慢学会去问同学。
- 计算这两周代码量
题集 | 2019-c10-指针 |
---|---|
代码量 | 352 |