C博客作业05--指针
0.展示PTA总分
1.1学习内容总结
1.指针与数组
- 指针的定义:一级指针:
int* p
- 指针必须有对象,不然会报错
- 利用指针可以直接访问地址,在函数内利用指针对对应地址的数据进行修改,不会随着函数结束被清除
- 指针和数组的区别:
- 指针保存的是数据的地址,数组是用来保存数据的;
- 指针访问数据是通过数据的地址进行解引用,是间接访问的,数组访问数据是直接的;
- 指针通常用于动态数据结构,数组用于存放固定数目而且类型相同的数据。
2.字符指针
- 定义类型:
char
- 字符指针通常用来指字符串,指针的位置为字符串首字符的地址
- 遇到多个字符串时,通常使用二级指针,对应每个字符串首字符
3.指针做函数参数
- 参数为指针,则传入的一般为某个变量的地址,此时该指针相当于变量本身
- 函数运行结束后,虽然指针会被销毁,但对变量的改变是不可逆的
4.二级指针、行指针
- 二级指针常用于多个字符串
- 定义:
char** p
,,二级指针是一级指针的指针,更高级的指针功能类似,但一般只用到二级和一级指针,而行指针相当于二维数组的数组名。 - 应用:如:
char* p,** pp
,则此时*pp=p
5.动态内存分配的两种语法
-
例:
int*p
p=malloc(10*sizeof(int))
...free(p)
-
char*str=NULL
str=(char*)calloc(10,sizeof(char))
free(str)
-
free
非常重要,申请内存不释放,内存申请过多会影响计算机的性能,以至于得重启电脑。
6.指针数组及其应用
- 指针数组虽然是数组,但他里面的元素是指针,因为[]的优先级比* 的优先级高,p先与[]结合,再与*结合,表示此数组是指针类型的,每个数组元素相当于一个指针变量。
- 指针数组常适用于指向若干字符串,这样使字符串处理更加灵活方便。
7.指针做函数返回值及其注意
- 函数定义的类型必须为指针
- 返回的指针不能在函数内定义,否则会随着函数结束消除,应该定义为全局变量,或以传参的方式进入
1.2本章学习体会
- 指针这一章学习的很困惑,会用指针却不知道该用在哪,该怎么用
- 729行,达标
2.PTA实验作业
2.1查找子串
2.1.1伪代码
定义三个循环变量i,j,k
定义n代表子串的长度
定义指针变量* index代表子串的首地址,并给予初值空
for i=0 to 子串结束
end for
此时i为子串长度n
for i=0 to 字符串结束
for k=0 to n
if 扫描到的字符串的部分不等于子串的部分时
跳出当前循环,此时k为子串和字符串相等部分的长度
end if
end for
if k和n相等
index=此时的字符串扫描到的首地址,跳出循环
end if
end for
返回index的值
2.1.2代码截图
2.1.3总结本题知识点
1.指针空值的利用,在一开始赋予指针空可以省去许多麻烦
2.学习了如何在字符串中查找子串的方法
3.学会了利用变量记录子串和字符串相等部分的长度
2.1.4PTA提交列表及说明
1.部分正确:没有处理好扫描结束的时机
2.部分正确:把字符串和子串长度相等的符号打成了不等
3-5.部分正确:字符串和子串长度的表达式没有处理好,三次尝试后多用一个循环,并引入n来方便记录
6.部分正确:多个最短子串查找错误,优化代码后解决
2.2输出月份英文名
2.2.1伪代码
在静态区定义字符数组分别为12个月的英文
if 传入的n在1-12内,返回对应月份的字符串
else 返回空
end if
2.2.2代码截图
2.2.3总结本题知识点
1.static定义的应用,如果是直接定义的话,返回的指针对应的地方什么都没有
2.指针作返回值的用法
2.2.4PTA提交列表
1.部分正确:二月和十月的英文拼写错误
2.3藏尾诗
2.3.1伪代码
宏定义M为100
定义三个循环变量i,k,j=0
定义两个长度为M的字符数组str1和str2
for i=0 to 4
输入字符串
for k=0 to 字符串结束,此时k所在为'\n'
end for
把k-2和k-1对应的字符给str2
end for
把str2结束位置赋'\0'
输出str2
2.3.2代码截图
2.3.3总结本题知识点
1.一个汉字占两个字节,在VS上调试好久没发现问题,没注意题目上写的
2.将每个字符串最后的字符赋予另一个字符串中的方法
2.3.4PTA提交列表及说明
这题虽然直接正确,但VS调试错了很多,有位置赋予不正确,有汉字占两个字节的错误等,因为这题测试点比较少,所以一遍过了
3.阅读代码
- ACM上的Lazy Math Instructor
- 代码功能,输入要判断的等式的数量,并俩俩判断是否相等,如果相等,输出YES,否则,输出NO
- 优点:不需要输入数字,而是以字母的形式的代数运算,思路奇特,值得学习