C语言(九)

作业分析讲解

================

 1. 暴露出来的问题:

            认真复习--》关注上课说到的一些关键点

    p是指针,*p就是普通变量 ---》观点是错误的(数组指针中大把这样的例子)

 

 

二级指针(多级指针)

===================

1.  定义:   类型名  **指针的名字

                   比如:  int  **p;  //定义了int类型的二级指针

                   注意:你定义的二级指针,它的类型必须跟一级指针类型一致

     作用:用来指向另外一个一级指针在内存当中的地址(指向指针的指针)

     总结:二级指针在使用的时候无非就两种情况

                        **q

                        *q   二级指针解引用一次和两次分别代表什么??这个搞清楚代码就不会写错

           

int s = 10;

int *p = &s;

int **q = &p;

 

printf("%p\n", &s);

printf("%p\n", *q); //二级指针解引用一次表示一级指针里面存放的地址

printf("%d\n", **q);//二级指针解引用两次表示一级指针所指向地址的值

 

              

练习:

           1.   char  buf[3][10]={"hello","hehe","haha"};

                 char *p=buf[0];

                 char **q=&p;

                 //通过q访问二维数组中的三个字符串 %s

                 //通过q访问二维数组中的单个字符%c

 

 C语言中的函数

=================================

1.  函数的概念和作用:

            数学当中:函数就是别人提供给你公式方法  sin()  cos()

            C语言中:为了提高代码的复用性,把一些功能封装成函数供开发人员使用

                  printf() --》函数    strcmp()   strcpy()

2.  函数的定义

                 函数的定义都是写在main函数的外面

                 返回值类型   函数名(形参列表)  //函数头

                 {

                         函数体;

                 }

                返回值:  告诉函数的调用者,我这个函数执行完毕之后的结果

                函数名:  变量名规则一样,通俗易懂,不能跟C语言的关键字以及C语言的函数名字冲突

                形参列表:告诉程序员,在使用这个函数的使用需要传递多少个实参,每个实参分别是什么类型

                实参(实际参数):函数调用的使用,传递的参数就是实参

                形参(形式参数):函数定义的时候出现在圆括号里面的都是形参

        函数的调用

                语法格式:   函数名(实参列表)  //实参的个数,类型必须跟形参保存一致

3.  函数定义需要注意的问题

             第一个: 函数的定义要么写在main函数的前面,要么写在main函数的后面(注意提前声明)

             第二个:实参和形参的关系一定要搞清楚

                           C语言中函数调用传递参数只有两种写法:  传值和传地址

                              区分传值和传地址: 函数的形参是普通变量 --》传值

                                                               函数的形参是指针--》传地址

                              传值:实参把自己的值拷贝一份给形参

                              传地址:实参把自己的地址赋值给形参指针

             第三个:数组作为实参和形参

                             数组作为实参:  传递的地址(指针)

                             数组作为形参: 要么写成指针的形式,或者写成  数组+n(n表示元素个数)

             第四个:局部变量和全局变量--》作用域

                            全局变量:  定义在main函数外面以及其他函数的外面

                                                全局变量在定义的.c文件中任何函数都能使用,并且其他.c文件也能使用

                                                全局变量是所有函数共享的,作用域属于整个文件

                           局部变量: 定义在某个函数的花括号里面的,作用域仅限于函数内部

                           作用域(作用区域):指的是这个变量的使用范围

                           需要注意的问题:

                                    第一个: 全局变量跟局部变量同名,优先使用自己定义的局部变量(全局变量不起作用了)

 

 

             

                    

 

练习:

             任意一天的作业,把写的代码功能封装成函数

                           封装一个函数,把用户从键盘输入的任意一个字符串中的非英文字符去除

                           封装一个函数,实现求n个整数的最大值,n作为参数传递

                                     int  getmax(int a[],int n)

                                     int  getmax(int *p)

 

作业:

    第一题: 明确指出每个num是全局还是局部,值是多少,不要编译运行

 #include <stdio.h>

int num=100;  //全局变量

 

int fun(int num)  //任何函数的形参都是局部变量,跟全局变量同名

{

num+=5;  //fun自己的形参num  87

printf("num在fun函数中被修改了%d\n",num);  //fun自己的形参num  87

        return num;  //fun自己的形参num  87

}

 

int main()

{

        //到目前为止main没有定义自己的num

        num-=18;  //全局变量num==82

        fun(num); //函数调用

printf("main函数中使用num %d\n",num);  // 全局变量num==82

int num=888;//main自己局部变量

fun(num); //main自己的num

printf("调用fun之后,main函数中使用num %d\n",num); //main自己的num

}

 

 第二题:请问程序执行结果是多少??

 

 

 

    难点:知识点  数组作为形参--》理解为指针,传地址

                           指针的运算,写法 ++b很好理解    b[1][1]的理解      

        第三题: 封装一个函数  int  fun(int  n)   该函数可以把1到n之间(1<= 数字 <=n)所有能被6整除的数,或者数字中包含6的全部找到并打印出来     

                     for(i=1; i<=n; i++)

                     {

                            if(%6==0)

                                printf();

                            //求出i的各个位,判断各个位是否等于6

                    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值