一、指针定义的学习
1.观看视频:第八章指针与字符串
2.代码文件列表
3.手写笔记
4.问题
·为什么int i;scanf("%d",i); 没有报错
解决:问同学并且反复观看视频后明白整数和地址是一样大的,scanf认为传入的是i的地址,所以编译不会报错,但是运行会出错,因为scanf把获取的值写到了错误的位置
·为什么*p=26后k=26
解决:视频解释原因为 *是一个单目运算符,用来访问指针的值所表示的地址上的变量,在*p被赋值26后,说明在经历函数调用后i的值被改变,故而k=26
·关于*和&的混淆
解决:上网解决。int a; int *pa=&a; 那么*&a可以理解为*(&a),&a表示取变量a的地址(等价于pa),*(&)a表示取这个地址上的数据(等价于*pa),即*&a仍然等价于a。&*pa可以理解为&(*pa),*pa表示取得pa指向的数据(等价于a),&(*pa)表示数据的地址(等价于&a),所以&*pa等价于pa。
·相同类型指针间可以做什么
解决:网上搜索后得到答案。可以比较大小,比较原则按照实际内存的高低位;可以赋值;两个相同指针变量相减可以获得在它们之间相隔的同类型元素个数
二、PTA作业
1.存在的问题
·当定义指针时一定是 int *吗
解决:看完视频并且浏览百度后知道,int *p; 中,int表示该指针变量所指向的数据的类型,例如int,double,float,datatype等等。p是一个指向int类型数据的指针变量,它指向哪一份数据应该由赋予它的值决定。
·什么时候必须带*什么时候不能带*
解决:根据百度得知定义指针变量时必须带*,给指针变量赋值时不能带*。*是一个特殊符号,表明一个变量是指针变量,在定义一个变量时必须带*号,在给这个变量赋值时,因为已经知道它是一个指针变量,就不需要再带*号,后面也可以像使用普通变量一样使用这个指针变量。