C博客作业05--指针

0.展示PTA总分

1.1学习内容总结

1.指针与数组

  • 指针的定义:一级指针:int* p
  • 指针必须有对象,不然会报错
  • 利用指针可以直接访问地址,在函数内利用指针对对应地址的数据进行修改,不会随着函数结束被清除
  • 指针和数组的区别:
  1. 指针保存的是数据的地址,数组是用来保存数据的;
  2. 指针访问数据是通过数据的地址进行解引用,是间接访问的,数组访问数据是直接的;
  3. 指针通常用于动态数据结构,数组用于存放固定数目而且类型相同的数据。

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所在为'
'
    end for
    把k-2和k-1对应的字符给str2
end for
把str2结束位置赋''
输出str2

2.3.2代码截图

2.3.3总结本题知识点

1.一个汉字占两个字节,在VS上调试好久没发现问题,没注意题目上写的
2.将每个字符串最后的字符赋予另一个字符串中的方法

2.3.4PTA提交列表及说明

这题虽然直接正确,但VS调试错了很多,有位置赋予不正确,有汉字占两个字节的错误等,因为这题测试点比较少,所以一遍过了

3.阅读代码

  • ACM上的Lazy Math Instructor

  • 代码功能,输入要判断的等式的数量,并俩俩判断是否相等,如果相等,输出YES,否则,输出NO
  • 优点:不需要输入数字,而是以字母的形式的代数运算,思路奇特,值得学习
原文地址:https://www.cnblogs.com/bestACG/p/11965673.html