栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言指针难点——函数的调用与指针的使用总结,计算机二级考试C语言指针不再是难题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言指针难点——函数的调用与指针的使用总结,计算机二级考试C语言指针不再是难题

  1. 相信很多小伙伴在接触C语言时,在函数、数组以及指针这里都觉得有点难度,特别是指针的使用还是挺绕的,大一到大二上学期我也一直在苦苦研究C语言,到目前为止,就简单的做一下总结。
  2. 函数:简单来说就是封装,将实现的各个功能写在不同的函数中,以方便使用,函数书写有两种方式,实例代码如下:
    #include
    void Avg(); 
    int Sum(); //第一种方法先声明函数,然后就可以先写main函数
    
    int main() //主函数main
    {
       int a=5,b=7;
       int sum;
       sum=Sum(a,b); //调用函数,因为Sum函数要接收两个变量,因此
       //必须传递两个int型变量给它,定义一个int型sum变量接收
       printf("数的和:%dn",sum);
       Avg(sum); //调用无返回值函数,无需变量接收
       system("pause");
       return 0;
    }
    
    int Sum(int a,int b) //实现求和功能的函数,接收调用者提供的两个int类型变量a和b,有返回值,且
    //返回值类型为int型,因此我们主函数在调用时应该用一个int型变量来接收,然后在主函数输出
    {
        int sum;
        sum=a+b;
        return sum;
    }
    
    void Avg(int sum)//实现求平均数功能的函数,接收一个变量sum,没有返回值,因此直接在本函数内进行输出即可
    {
        double avg;
        avg=sum/2.0;
        printf("平均数:%.2fn",avg);
    }

    下面是第二种方法:

    #include //第二种方法,无需先声明函数,将主函数main放到最后面即可
    
    int Sum(int a,int b) //实现求和功能的函数,接收调用者提供的两个int类型变量a和b,有返回值,且
    //返回值类型为int型,因此我们主函数在调用时应该用一个int型变量来接收,然后在主函数输出
    {
        int sum;
        sum=a+b;
        return sum;
    }
    
    void Avg(int sum)//实现求平均数功能的函数,接收一个变量sum,没有返回值,因此直接在本函数内进行输出即可
    {
        double avg;
        avg=sum/2.0;
        printf("平均数:%.2fn",avg);
    }
    
    int main() //主函数main
    {
       int a=5,b=8;
       int sum;
       sum=Sum(a,b); //调用函数,因为Sum函数要接收两个变量,因此必须传递两个变量给它,定义一个int型sum变量接收
       printf("数的和:%dn",sum);
       Avg(sum); //调用无返回值函数,无需变量接收
       system("pause");
       return 0;
    }
    
    
  3. 指针:简单来说就两部分,指针变量和地址,例如int *p,这样子是同时声明了指针变量和地址,指针是通过地址来得到值

  • 我们都知道int后面接的是变量名,因此整体上来看,*p是指针变量,p就是该变量的地址,也就是我们要输出指针的值应该是printf("%d",*p)而不是printf("%d",p),printf("%d",p)输出的只是*p的地址。

  • 详情解释代码如下:

    #include 
    //对于赋值给指针,只要获取得到变量的地址,那么就得到了该值
    int main()
    {
        int a=3;
        int *p;
        p=&a; //将a的地址给指针p
        printf("值:%d,地址:%dn",*p,p); //输出值和地址
        system("pause");
        return 0;
    }
    

    结果如下:

4. 指针与数组

  • 直接上代码如下:
    #include 
    //对于赋值给指针,只要获取得到变量的地址,那么就得到了该值
    int main()
    {
        int a[5]={1,2,3,4,5}; //对于这个数组,a则是首地址(数值1的地址)
        int *p;
        for(p=a;*p<=5;p++) //数组赋值给指针,只需将首地址给指针即可(p=a),p++是指针p指向下一个数的地址
        {
            printf("值:%d,地址:%dn",*p,p);//通过指针输出数组a的所有值和地址
        }
        system("pause");
        return 0;
    }
    

    结果如下:

  •  指针和数组关系:通俗来说,其实也不难看出,指针可以说是数组,数组也可以说是指针

(1)对于int *p,a[5]={1,2,3,4,5};p=a,现在a是地址且是数组的首地址,首地址的值是a[0],p也是地址,*p是指针p的变量名,可以看出*a等于首地址的值,数组a的首地址赋给了指针p,那么可以推出以下:

  • p[0]==a[0],p[0]和a[0]相等,下面结论也是如此
  • *p==p[0]
  • *p==a[0]
  • *p==*a
  • *a==a[0]

(2)还有以下:

  • p++:指针指向下一个地址(先用后指)
  • ++p:也是指针指向下一个地址(先指后用)
  • *(p++):相当于*p
  • *(++p):输出*p后面的值,p指向下一个地址的值后再输出

5. 总结:

  1. 函数:是实现各个功能的容器
  2. 指针:指针的传递是地址,获取地址即可得到对应的值
  3. 指针获取数组的值,只需将数组的首地址赋给指针,再通过遍历得到其他值
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008306.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号