zoukankan      html  css  js  c++  java
  • C博客作业05-指针

    这个作业属于哪个班级 C语言--网络2011/2012
    这个作业的地址 C博客作业05-指针
    这个作业的目标 学习指针相关内容
    姓名 邓宏

    0.展示PTA总分(0----2)
    展示关于“指针题目集”分数截图。

    1.本章学习总结(3分)

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

    1.1.1指针与指针变量的概念。

    (1)指针:就是内存中的一个存储单元的地址,即内存单元的编号。
    (2)指针变量:是一个能存放地址值的变量。通过它存放的地址值能间接访问它所指向的变量。

    1.1.2指针变量的定义。

    类型名  指针变量名类型说明中可取C语言的有效类型, 表示为指针型变量。如:char  c1,c2; 表示c1与c2是指针变量,其基类型是字符型。注意:指针的基类型与其所指向的变量的类型要统一。

    1.2 字符指针

    指针如何指向字符串

    将指针指向该字符串的首地址即可。
    比如:
    char a[] = "abscdf";

    字符串函数

    strcpy

    功能:把一个字符串复制到一个数组中。

    strcat

    功能:把一个字符串添加到另一字符串结尾处并添加''。
    char *p = a; // 将字符串"abscdf"的首地址(即数组名)赋值给指针p
    puts(p); // 等价于puts(a)

    strlen

    功能:计算字符串s的长度

    strcmp

    功 能: 比较两个串
    1.3 指针做函数返回值
    具体格式是什么,注意事项。
    申明:

    void aaa(int *p);
    

    使用:

    aaa(p);
    

    函数:

    int aaa(int *p)
    {
    
    return p;
    }
    

    注意事项:
    用指针作为函数返回值时需要注意的一点是,函数运行结束后会销毁在它内部定义的所有局部数据,包括局部变量、局部数组和形式参数,函数返回的指针请尽量不要指向这些数据,C语言没有任何机制来保证这些数据会一直有效,它们在后续使用过程中可能会引发运行时错误
    1.4 动态内存分配
    举例为多个字符串做动态内存要如何分配。
    原因:
    1.可以动态的申请空间,以便动态确定对象所需要的内存;
    2.便于储存大型对象,通常情况下栈区的大小容不下过于庞大的对象;
    3.传递指针比传递整个对象更方便高效;
    堆区和栈区区别:
    1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
    2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。
    动态内存分配相关函数及用法:
    1、malloc函数
    malloc函数的原型为:
    void malloc (u igned int size)
    1.5 指针数组及其应用
    int a[10][5];
    int (
    p)[5];//每行5个元素的数组指针。
    p=a;//把p指向a。
    1.6 二级指针
    A(即B的地址)是指向指针的指针,称为二级指针,用于存放二级指针的变量称为二级指针变量.根据B的不同情况,二级指针又分为指向指针变量的指针和指向数组的指针。
    1.7 行指针、列指针
    行指针:指的是一整行,不指向具体元素。
    列指针:指的是一行中某个具体元素。
    可以将列指针理解为行指针的具体元素,行指针理解为列指针的地址。
    那么两个概念之间的具体转换是:
    *行指针----列指针
    &列指针----行指针
    a即是它的行指针,a+0表示第0行的地址,a+1表示第1行地址…
    或者可以说成&a[0]表示第0行的地址,&a[1]表示第1行的地址…
    那么a[0]+0,a[0]+1…就表示第1行第1列的地址,第1行第2列地址…
    a[1]+0,a[1]+1就表示第2行第1列地址,第2行第2列地址…

    2.PTA实验作业(7分)

    2.1 题目名1(2分)

    选择一题难度较大的题目。请认真写伪代码整理解题思路。自己代码和同学代码比较,说明各自代码特点。

    2.1.1 伪代码

    定义一个二维数组str1[4][20],输入诗,注意没有输入的放'',或者以指针数组的形式输入
    定义一个一维数组str2[10],存放诗的尾
    判断每一行诗的长度,将最后两个字符输入到str2中,注意下标要自增,如str2[j++] = str1[i][lens - 2];
    最后在str2的末尾放结束标志符
    输出str2
    2.1.2 代码截图

    2.1.3 找一份同学代码(尽量找思路和自己差距较大同学代码)比较,说明各自代码特点。

    差别:同学使用动态分配,节省空间
    2.2 题目名2(2分)
    选择合并2个有序数组这题介绍做法。
    2.2.1 伪代码
    定义 i=m-1;
    定义 j=n-1;
    定义 k=m+n-1;
    while(j>=0且i>=0)
    {
    如果(a[i]>=b[j])那么将a[i]赋值到从a数组最后一位依次往前赋值;
    否则 将b[j]赋值到从a数组头一位依次往后赋值;
    }
    当(j>=0)时 a[k--]=b[j--];将b组未赋值完的值依次排列
    2.2.2 代码截图

    2.2.3 找一份同学代码(尽量找思路和自己差距较大同学代码)比较,说明各自代码特点。
    展示同学代码,介绍做法具体区别。

    同学:利用二级指针,符合所学知识,但相对没那么精简
    2.3 题目名3(3分)
    选择说反话-加强版这题介绍字符指针操作如何操作字符串。并说明和超星视频做法区别。

    2.3.1 伪代码
    定义str[500000]
    输入并排除多余空格
    从后往前依次输出
    2.3.2 代码截图


    2.3.3 请说明和超星视频做法区别,各自优缺点。
    超星视频代码更精简,运用指针,同时运用printf("%.s",len,p);的新语法,省去了删空格的步骤

  • 相关阅读:
    【批处理】批处理遍历指定文件夹下的文件
    Win10删除文件显示删除确认对话框
    【makefile】make程序的命令行选项和参数
    【批处理】获取当前目录的绝对路径
    Win10怎样显示此电脑
    单片机普通行列矩阵键盘驱动
    ADS1.2与MDK4.7冲突问题的解决方法
    Cortex-M3 咬尾中断 与 晚到中断
    Cortex-M3 SVC与PendSV
    安卓渗透测试工具——Drozer(安装和使用)
  • 原文地址:https://www.cnblogs.com/denghong88/p/14198423.html
Copyright © 2011-2022 走看看