第六次博客作业

0.展示PTA

1本章学习的内容

1.1指针定义、指针相关运算、指针做函数参数

  • 指针定义
    (1)一般形式:类型名 *指针变量名;
    (2)定义指针变量要使用指针声明符;类型名指定指针变量所指向变量的类型,必须是有效的数据类型;指针变量名是指针变量的名称,必须是一个合法的标识符。
    定义多个指针变量时,每个变量前面都要加指针声明符
  • 指针相关运算
    (1)取地址运算
    单目运算符&用于给出变量的地址。
    指针类型和它所指变量的类型必须相同
    (2)间接访问运算
    *除了被用于定义指针变量外,还被用于访问指针所指向的变量。
    p指向a时,*pa访问同一个存储单元
    (3)赋值运算
    一旦指针被定义并赋值后,就可以如同其它类型变量一样进行赋值运算。
    只能将一个指针的值赋给另一个相同类型的指针
  • 指针作为函数的参数
    (1)调用函数不能改变实参变量的值,当指针变量作为函数参数时也遵循这个规则。
    (2)调用函数不能改变实参指针变量的值,但可以改变实参指针变量所指向变量的值。
    (3)将指针作为函数的参数能使函数返回多个值。

1.2 字符指针

  • 指针指向字符串
    (1)如果定义一个字符指针接收字符串常量的值,该指针就指向字符串的首字符。
    (2)字符数组和字符指针都可以用来处理字符串。
    为了尽量避免引用未赋值的指针所造成的伤害,在定义指针时,可先将它的初值置为空,如char *s=NULL
  • 常用的字符串处理函数
    (1)字符串的输入输出
    函数scanf()和gets()可以用来输入字符串,printf()和puts()输出字符串。
    scanf()遇到回车和空格输入结束,并自动将输入的数据和字符串结束符'\0'送入数组中。
    printf()输出遇到'\0'结束。
    gets()从输入得到一个字符串,遇到会车结束,自动将输入输入的数据和'\0'送入数组中,gets()输入时允许有空格。
    gets()有返回值,如果成功则返回值是字符串的首字符地址,否则返回NULL
    puts()输出时遇到'\0'自动将其转换为'\n'。
    同样,puts()函数也有返回值,若失败则返回EOF
    (2)字符串的复制
    char *strcpy(char *s1,char *s2)
    该函数把字符串s2复制到s1,直到遇到s2中的'\0'为止。
    s1要有足够的空间容纳s2,且s1的内容被覆盖,函数返回的是s1
    (3)字符串的连接
    strcat(s1,s2)
    该函数将s2接到字符串s1后面,此时,s1中原有的结束符'\0'被放置在连接结束后的位置上。
    数组s1的长度要足够大
    (4)字符串的长度
    strlen(s1)可以计算字符串的有效字符个数(不包括'\0')。

1.3指针做函数返回值

指针被作为函数的返回值时可以返回多个值。
指针函数可以返回字符串的首字符地址,从而返回多个值。

1.4动态内存分配

  • 动态内存分配步骤
    (1)了解需要多少内存空间。
    (2)利用C语言提供的动态分配函数来分配所需要的存储空间。
    (3) 使指针指向获得的内存空间,以便于指针在该空间内实施运算和操作。
    (4) 当使用完毕内存后,释放这一空间。
  • 动态内存分配函数
    (1)动态内存分配函数malloc()
    功能: 在内存的动态存储区中分配一连续空间,其长度为size。若申请成功则返回指向所分配内存空间的起始地址的指针,我申请内存空间不成功则返回NULL。
    调用malloc时,应该利用sizeof计算存储块大小,不要直接写数值。
    (2)计数动态存储分配函数calloc()
    功能: 在内存的动态存储区中分配n个连续空间, 每一存储空间的长度为size并且分配后还把存储块里全部初始化为零,如果申请成功就返回一个指向被分配内存空间的起始地址的指针,若申请内存不成功则返回NULL。
    (3)动态存储释放函数free()
    原型:void free (void *ptr)
    功能: 释放由动态存储分配函数申请到的整块内存空间,ptr为指向要释放空间的首地址,如果ptr的值是空指针,则free什么都不做。该函数没有返回值。
    (4)分配调整函数 realloc()
    原型:void *realloc(void *ptr,unsigned size)
    功能:更改以前的存储分配。

1.5二级指针

(1)A(即B的地址)是指向指针的指针,称为二级指针,用于存放二级指针的变量称为二级指针变量。
(2)首先任何值都有地址 ,一级指针的值虽然是地址,但这个地址做为一个值亦需要空间来存放,是空间就具有地址 ,这就是存放地址这一值的空间所具有的地址,二级指针就是为了获取这个地址。

1.6行指针、列指针

  • 行指针
    形式:```int(*p)(n)
    含义:p为指向含有n个元素的一维数组的指针变量。
    行指针可以和数组名互换使用。
  • 小结
    列指针:表示离a[0][0]的第n个位置的元素;
    行指针:表示第n行的首地址。

2.PTA实验作业

2.1藏尾诗

  • 伪代码
定义字符型数组a[30];
for(诗的四行)
{
输入一行诗gets;
输出最后一个字;
}
  • 代码截图

  • 代码比较
    同学新建了一个字符数组,我的代码是输入每一行诗的同时输出最后一个字。

2.2

  • 伪代码
    ···
    for(0到m+n-1)
    {
    将a数组和b数组的值按照先后的顺序赋值给c
    }
    用选择排序法将c排序;
    for()
    {
    将c的值依次赋值给a;
    }
    ···

  • 代码截图

  • 代码比较

    我的代码看似行得通,实则不行;
    同学代码灵活运用了malloc函数;

2.3

  • 伪代码
for(从最后开始)
{
for{
从最后开始往回找‘ ’;
}
for{
向后输出字符;
}.
}
  • 代码截图
posted @ 2020-12-27 20:53  巫云☁️  阅读(118)  评论(2编辑  收藏  举报