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

    0.展示PTA总分(0----2)

    展示关于“指针题目集”分数截图。

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

    整理指针主要知识点,必须包含内容有:

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

    • 指针定义
      C 语言规定所有变量在使用前必须先定义,指定其类型,并按此分配内存单元。指针变量不同于整型变量和其他类型的变量,它是专门用来存放地址的,所以必须将它定义为“指针类型”。
      要注意指针的类型和它所指的类型需要相同。
      基类型 *指针变量名;
    • 相关运算
      将整型变量a的地址赋给整型指针p,使指针p指向变量a。
      将a的地址给p1,再将p1的值给p2,所以指针p1与p2都指向a,即p1=p2=a。
      赋值:直接对p赋值,如p=0,表示p=NULL
      p=4,表示对指针p所指的内容赋值,如 p=a,p=4,表示a=4
    • 指针做函数参数
      用指针变量作为函数参数, 在函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化依然保留下来,这样就实现了”通过调用函数使变量的值发生了变化,在主调函数(如main函数)中使用这些改变了值”的目的.

    1.2 字符指针

    包括指针如何指向字符串、字符串相关函数及函数代码原型的理解、字符串相关函数用法(扩展课堂未介绍内容)

    • 字符指针:指向字符型数据的指针变量。
    • 相关函数(常用)
    函数名 函数格式 作用
    strcpy strcpy(a,b) 把b字符串内容赋给a字符串 可以使用strncpy能自定义赋值的位数
    strcmp strcmp(a,b) 将a串与b串比较 1.a大值为1,b大值为-1,相等值为0. 2.可以使用strncmp自定义比较位数
    strcat strcat(a,b) 把b串从头接到a串末尾 可以使用strncat自定义追加位数
    strstr strstr(a,b) 在a串中找到b串首次出现的地址 不会包含结束符

    1.3 指针做函数返回值

    • 格式
      格式为: 数据类型 *函数名称(形式参数列表) 例如: int *Fun(float x, float y);
      返回值为地址。

    • 注意事项
      函数的返回值类型需要定义成指针变量类型。

    1.4 动态内存分配

    • 为什么要动态内存分配?
      动态内存是相对静态内存而言的。所谓动态和静态就是指内存的分配方式。动态内存是指在堆上分配的内存,而静态内存是指在栈上分配的内存。
    • 堆区和栈区区别
      前面所写的程序大多数都是在栈上分配的,比如局部变量、形参、函数调用等。栈上分配的内存是由系统分配和释放的,空间有限,在复合语句或函数运行结束后就会被系统自动释放。
      而堆上分配的内存是由程序员通过编程自己手动分配和释放的,空间很大,存储自由。
    • 相关函数
      malloc函数:
    int *p=NULL;
    p=(int *)malloc(2);
    

    该函数的功能是在内存的动态存储空间即堆中分配一个长度为size的连续空间。函数的返回值是一个指向所分配内存空间起始地址的指针,类型为 void*型。通常需要进行强转
    如果此函数未能成功地执行,如内存空间不足,则返回空指针 NULL。

    calloc函数:

    p=(int *)calloc(10,sizeof(int));
    

    分配n个大小为s的堆区,与malloc分配的连续的空间不同
    申请堆区空间后要记得在使用完之后释放.

    1.5 指针数组及其应用

    • 格式:
    类型名 *数组名[数组长度];
    
    • 区别
      二维数组:一旦定义,那么每个字符数组的字符串最大长度和首地址都不能改变
      字符指针数组:比二维字符数组更加灵活,其指向的每个字符串的首地址可以改变,字符串最大长度也可以改变。

    1.6 二级指针

    • 格式:
    类型名 **变量名;
    

    如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针。

    1.7 行指针、列指针

    定义格式、主要用法。

    • 格式:

    行指针:

    类型名 (*变量名)[数组长度]
    

    列指针:

    类型名 [数组长度](*变量名)
    
    • 用法
    char a[5][10];
    char (*p)[10];
    p=a;
    char *q[10]=a;
    
    

    2.PTA实验作业(7分)

    2.1 藏尾诗(2分)。

    2.1.1 伪代码

    定义整型变量i,j
    定义二维数组poem
    定义字符型行指针p
    定义整型变量x存放每行诗长度
    p=poem
    for i=0 to 4
    	输入每行
    end for
    for p=poem to poem+4
    	x=*p的长度
    	输出 (*p)+x-2
    end for
    

    2.1.2 代码截图

    2.1.3 找一份同学代码比较,说明各自代码特点。


    同学的代码思路主要是再定义一个数组存放尾字,没有用到指针,思路差距较大

    2.2 选择合并2个有序数组

    2.2.1 伪代码

    int* c
        c = (int*)malloc((m + n) * sizeof(int))
    定义整型变量i,j,k
    i是第一个数组a中的数的顺序
    j是第二个数组b中的数的顺序
    while k<m+n
    if k<m+n 数组a,b中的数都没用完
          if a[i] < b[j]
                c[k] = a[i]
                i++
          else
                c[k] = b[j]
                j++
    else
          if a用完
                c[k] = b[j]
                j++
          else
          c[k] = a[i]
          i++
    end if
    k++
    end while
    输出
    释放
    

    2.2.2 代码截图

    2.2.3 找一份同学代码比较,说明各自代码特点。

    展示同学代码

    同学的代码 思路上与我有些像 但各种判断要更加简洁易懂,代码量也比我少,各种分支判断值得我学习

    2.3 反话-加强版

    2.3.1 伪代码

    定义字符型指针变量p,q,a,e
    定义整型变量 x,count,flag
    x=strlen(p)
    p = (char*)malloc(sizeof(char) * 600000)
    for q=p to p+x-2
          if *q=空格
                for a=q+1 to q+count
                      输出*a
                end  for
                if count不为0
                      flag=1
                      for e=p to q
                            if *e不是空格
                            flag=0
                            break
                      end for
               if flag为0
                      输出空格
                end if
                count=0
          end if
          else
                count++
                if q等于p且*p不为空格
                      for a=q to q+count
                            输出*a
                      end for
                end if
    end for
    

    2.3.2 代码截图

    2.3.3 请说明和超星视频做法区别,各自优缺点。

    超星视频做法:逆向遍历数组,遇到空格计算单词长度输出,长度设为0
    其实和我的方法有点像,只是我的代码比较繁琐,虽然做了很久,但还是独立做出来的

  • 相关阅读:
    艾伟_转载:你知道吗?——ASP.NET的Session会导致的性能问题 狼人:
    艾伟_转载:一次挂死(hang)的处理过程及经验 狼人:
    艾伟也谈项目管理,微型项目实践感悟 狼人:
    艾伟_转载:[原创]再谈IIS与ASP.NET管道 狼人:
    艾伟_转载:企业库缓存依赖的实现基于文件依赖 狼人:
    艾伟也谈项目管理,我也发软件开发团队的思考(侧重点是人员) 狼人:
    MYSQL用户名:root
    map 和 unordered_map以char * 为key
    设计模式单例模式(singleton)
    Android允许其他应用程序启动你的Activity
  • 原文地址:https://www.cnblogs.com/jingzheng001/p/14198918.html
Copyright © 2011-2022 走看看