C语言第一周学习总结

        本周进行了第一周相关C语言的学习,主要学习了相关指针与函数相关的知识。本着温故而知新的原则,对本周学习内容进行总结。

        一、指针

        1、一维数组指针

        首先因为指针指向的是地址而不是具体的值的作用,所以他一般多应用在数组中。因为数组的地址多为连续的,此时一个指针,通过对指针的不同操作即可达到对该数组的操作。

        指针定义格式为:

        数据类型 * 变量名=数组名/&数组首元素,例如:

        int *p =a;

        int *p=&a[0];

        其中a与&a[0]均表示数组首元素的起始地址,&a[i]与a+i表示第i个元素的起始地址,该地址的大小在32位机中为4个字节,在64位机中为8个字节,&a表示整个数组的起始地址,&a+1增加的即为一个数组的地址长度其与a+1是不同的。

        2、二维数组指针

        int a[3][4]={0};

        int *p=a;

        此时数组首元素起始地址的表示方式为:

        &a[0][0],&a[0]+0,*(p+0)+0

        数组首行起始地址的表示方式为:

        a,p

        a与p的区别为,a是数组名是一个常量,p是变量,a是不可改变的

        3、野指针

        当定义一个指针,但指针没有指向的时候,则该指针称为野指针,操作该野指针会导致

        数值与不确定的变化,所以应避免野指针的存在;

        当不确定指针指向时,应将指针指向NULL,防止野指针的出现,此时若操作野指针则

        只会出现段错误,该指针不能操作;

        

        一维数组与二维数组异同理解:

        一维数组中a表示数组首元素的起始地址,二维数组中a表示元素内一个数组的起始地址,当定义数组指针p时,对一维数组为p=&a,二维数组为p=a,另外定义指针而非数组指针时,对一维数组应定义p=a 其中&a与a均表示一数组的起始地址

        4、数组指针

        数组指针为指向一个数组(一般为二维数组中的一维数组)的指针,格式为:

        类型名 (*指针变量名)[整形常量]

        例如:

        int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

        int (*p)[4];

        表示p可以指向a、a+1、a+2,但不能指向一维数组具体元素

        5、指针数组

        如: char* p[4];

        表示一个字符型数组,数组元素时字符数据的指针

      

        二、函数

        函数可以把相对独立的某个功能抽象出来,使他成为一个独立实体,方便在同一个程序中多次调用;

        函数的优点:

        (1)、使程序变得更简短且清晰明了;

        (2)、有利于程序维护;

        (3)、可以提高程序开发效率;

        (4)、提高代码的普适性,以及能多次重复使用;

        

        1、内置函数

             由C语言系统提供,无需额外定义,只需要在使用时包含该函数定义的头文件即可;

          

         2、用户定义函数

        (1)函数定义

        函数定义需要由返回值类型 函数名(形参)以及函数主体构成,例如:

        double max(double x,double y)

        {

                double temp;

                temp=x>y?x:y;

                return temp;       

         }

        这就是一个求X,Y之中较大的值,并返回该较大值的一个函数;

        (2)函数声明

              声明在原型上与函数头部类似,放在头文件说明以下,调用函数之前如:

                double max(double x,double y);

         (3)函数调用

                 函数调用本质是一个中断,先保护现场,接下来给要调用的函数形参申请空间,将实参的数赋给形参空间,跳入函数内部执行 之后将结果返回到一个临时空间内,恢复现场

                使用方法例如:

        int main()

        {

                int max;

                max=max(2,3);

        }

               调用也可在定义的函数里调用别的函数,称为函数的嵌套调用 ;

                当在一个函数内调用自身,则称为递归调用,该调用一定要有出口;

        (4)函数的形参和实参

                如上例中,double x,double y称为形参,2,3称为实参;

                这种传递称为数值传递,当传递的为指针或数组名时,则称为地址传递;

        (5)函数指针

                一个函数在编译时,有一个入口地址,即该函数的指针,例如:

                int (*p)(int ,int);

                p=max;

                函数指针的值就是指针所指向函数的返回值;

        (6)二级指针

                int **p;

                **p是一个整形变量值;

                *p是一个指向整形变量的指针

                p是一个指向整形变量的指针的指针

                

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值