计算机之路————C语言基础快速复习3

计算机之路————C语言基础快速复习3

函数强化:
    C语言的函数名实际上是函数的入口地址。
    若被调用函数(非void型)没有return语句,将会带回一个不确定的值。
    C语言中,子程序体现为函数,程序的每一个模块是函数
    
    形参与实参;无参函数(没有形参)
    main函数的缺省类型为int型。当然可以写为void型
    
    函数名字,各个实参的计算次序是依赖于实现的,可能从左向右计算也可能从右向左计算还可能并行计算。
    因此函数名,各个实参的值不要依赖于他们的计算次序
    printf("...",*pa,*pb,*pa=*pa+*pb)//参数计算次序从右往左!!!//输出是从左到右
    
数组强化:
    三种构造性数据类型:数组,结构体,共用体;
    int a[5][2][26][5][3]; //a[0][1]仍然合法!会把后面的[26][5][3]当做一个基础类型(三位数组)
    数组声明,最外层可以不指明本维元素个数。int a[]={...};  int a[][4]={...};
    字符串是常量字符数组;字符数组是字符串变量;
    常量字符串,系统自动添加结束标志。变量字符串,程序员必须手动加结束标志。
    char name[20]="aaa";等价于 char name[20]={'a','a','a','\0'};
    strcpy(st1,st2);//st2赋值给st1
    strcat(str1,str2);//连接到str1后面
    
线性表:类型相同,首项没有前驱,末项没有后继,其他项排成一行。数组是典型的线性表。
    分类
        最简单的分类是排序
            主元排序(每次从中选出一个最小/大的,放在第一个。然后从剩下里面选出最小的放在第二个位置,......)
            冒泡排序(不断交换)
        
    检索
        在给定的数据集合中查找某特定数据
            顺序检索
            对半检索(已排好序)
            
栈:特殊的线性表;先进后出;所有操作在栈顶
    压入(不保证越界)
    弹出(判空)

队列:先进先出;环形队列;首指针尾指针(指向队列中第一个可取单元;指向队列中第一个空单元;)
    入队
    出队
    应用:括号配对,字符处理。
            
类型定义:    typedef 类型名 标识符   (typedef意思也就是:给类型起个别名!后面方便使用)
    两个特殊的使用:
        给数组类型起别名:typedef int arr[10];定义了一个别名arr,类型是int[10]的数组;arr a;相当于int a[10]
        给枚举类型起别名:typedef enum color{...} tcolor;   tcolor c;
        
    
    
查漏:
    break跳出的是循环语句(for,while,do-while)并不是if-else。
    switch-case语句当中也要用到break跳出每一个case
    char c='s';变量c,内存中存了一个字符s,但实际上存放的是‘s'对应的ASCII码
    直接访问:p+10  间接访问:(*v)+10
    指针:
        设有类型T,则任何一个类型都有一个指向该类型的指针类型:T*  指针是一种特殊的变量,通常存储的是十六进制的地址。
        空指针(值为NULL):表示指针变量的值为空,不指向任何变量或者函数,通常对于整数值0
        NULL是一个值,它的类型:属于所有指针类型!可以对任何指针进行操作。(判等)
        void*是一个类型,用来表示不知道基类型的指针(表示任何类型的指针)
        指针运算:减法;赋值;加法没有意义不允许两个指针做加法;判等;判空(NULL);数组名是个常量指针,不可以a++这种运算!指针变量可以。
        *p++即*(p++)    *++p即*(++p)
    指向指针的指针:
        int **P;
    数组名是常量指针。指针可以看做长度为1的数组。


    多维数组与指针:
        C语言按照行优先原则分配数组元素存储空间;首先分配第一行,再分配第二行,,,
        (内存地址从小到大依次分配)(图片展示就是从下到上;上面地址大;)
        a[3][3];
        让ptr指向a[0][0]:
            ptr=&(a[0][0]);
            ptr=a[0];
            ptr=*a;
            //a指向a[0],  a[0]指向a[0][0]
            //再高维数组以此类推!a指向a[0],  a[0]指向a[0][0],a[][]指向a[][][]......
        
        指针数组:基础元素是指针;声明形式:T* array[n];
        
    指针与字符串:
        字符串:常量字符串(常量字符数组,存储在常量区),变量字符串(放在字符数组中,存在变量区)
        用指针指向字符串;
        字符指针可以指向一个字符串;字符数组可以存一个字符串!
        一个字符数组可以存多个字符串,字符串之间有分隔符'\0'即可

    结构体:把不同类型捏成一个结构体类型
        可以把数组看成是一个特殊的结构体,里面的元素类型都必须一样,而结构体中的成分可以是不同类型;
        struct ach{
            int num;
            char name[100];
            int score;
        };
        结构体类型定义可以嵌套!
        enum tgender{...};
        struct date{...};
        struct person{//类型定义;也可以使用typedef
            int age;
            enum tgender gender;
            struct date birthdate;
        };

        结构体类型引用 struct person (没有分配空间只是一个引用,一个标记,可以把它看成是一种类型,struct person类型)
        声明结构体变量:struct person xm;
        指向结构体变量的指针变量;(可以用typedef起别名 )
        访问成员:
            直接访问,用.
            间接访问(指针),用->
            
        结构体数组
        结构体指针类型做函数参数
        结构体类型做函数参数
        
        结构体可以整体赋值!结构体不允许整体运算,可以设计一个函数来进行加减乘除等运算。


    
    char* p[4];//是四个指针,组成了一个数组,称为指针数组。
    char (*p)[4];//*与p是在连在一块的,使p成为一个指针,这个指针指向一个具有4个char型数据的数组,为数组指针。p中存放了这个char型数组的首地址。
    int* p=a[2][2]; p即p[0],p++即p[0]++也就是p[1],p[1]指向的是p[1][0]
    
    C语言只有一种参数类别————值参数
    函数调用:计算实参----转换成形参类型----送入形参中;(要求赋值兼容)
    
    C语言是把数组当做指针来处理的!!!
    多维数组做函数参数,声明时可以省略最外层的尺寸 int func(float y[][20]);
    数组参数传递给函数的值不是整个数组的值而是数组名的值,也就是实参数组的首地址。在函数内只会给他开辟一个指针空间,不会给形参开辟整个数组空间。
    
    函数返回值的类型:不允许是数组类型和函数类型,其他都可以,如指针类型,结构体类型!
    char* func(int n){...}
    

递归思想:
    函数里面又出现了它本身的调用!
    缺点:递归的执行效率低
    
    
    
    
    
    
    
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值