• 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
    • 优点:不需要输入数字,而是以字母的形式的代数运算,思路奇特,值得学习
  • 相关阅读:
    【JZOJ6223】【20190617】互膜
    【JZOJ6225】【20190618】计数
    【JZOJ6226】【20190618】纳什均衡
    【JZOJ6210】【20190612】wsm
    【学习笔记】析合树
    【JZOJ6206】【20190610】二分图边染色
    【loj3123】【CTS2019】重复
    【loj3120】【CTS2019】珍珠
    【loj3119】【CTS2019】随机立方体
    CTS&&APIO2019爆零记
  • 原文地址:https://www.cnblogs.com/bestACG/p/11965673.html
Copyright © 2020-2023  润新知