一起笨笨的学C——005-2

目录

目录

前言

正文

代码1:

代码2:

  后语



前言

        为什么005-2,因为我觉得我懂了,当开始007结构指针这篇笔记时,我还是晕了。各方查看资料,最终开单章笔记来加深对指针运用的理解。

        一起笨笨的学C——005-CSDN博客


     

正文

        没有对比就没有伤害!请看下面哪个代码ab会改变?

代码1:
#include <stdio.h>

void Swap(int a, int  b)
{
        int buf = a;
        a = b;
        b = buf;
}

int  main(int argc, char *argv[])
{
        int a = 3, b = 5;
        Swap(a, b);
        printf("a = %d, b = %d\n", a, b);
        return 0;
}
代码2:
#include <stdio.h>

void Swap(int* a, int*  b)
{
        int buf = *a;
        *a = *b;
        *b = buf;
}

int  main(int argc, char *argv[])
{
        int a = 3, b = 5;
        Swap(&a, &b);
        printf("a = %d, b = %d\n", a, b);
        return 0;
}

      以上是经典的指针作为函数参数的对比,结果大家多数能说对或者像我一样能猜对,但是怎么去理解并固化在脑子里就看各人的造化了。

        先看结果:

为什么第一个没变,第二个变了呢?直观的对比就是第一个没用指针,第二个用指针了。

K&R里面说的很直白,“C语言是以传值的方式将参数的值传递给被调用函数的,因此,被调用函数不能修改主调函数中变量的值。”(K&R提到,由于参数传递的是值,所以函数无法直接修改实际参数的值。如果希望函数能够修改实际参数的值,可以通过传递指针的方式实现。)《手把手教你c语言》里说,由于函数是在栈中运行,并且传递是单向的,没用指针时,传的值在被调函数中改过后 就被弹出了,不存在了,主函数没有get到。而用指针传递的是地址,当在被调函数中改变后,被弹出的是地址,改变的结果在主调函数中。

        恩,我的理解是,主调函数是儿童,被调函数是成人,参数是手柄。儿童在玩游戏,大人在旁看着,想改变一些操作,在自己脑子里改了,但是只能干着急,孩子游戏还是失败了。但是如果孩子把手柄交给大人了(也就是参数用了指针),那么大人就能改变游戏结果了。参数不是指针,喊破喉咙也没用。参数是指针,你就是游戏,游戏就是你,人游合一,岂不快哉!

               


  后语

      1、以上就是屈屈一些拙见了,如果你有所感悟,我的目的也就达到了。

        2、顺便提一下,由于《C语言程序设计K&R》与《手把手教你C语言》编写时间受当时技术限制,都有不少问题,《笨办法学C语言》讲的语言规则感觉可以让代码更牢固一点。

        3、一本C语言书真的不够,入门尚可,很多不理解的东西,多看看其它书说不定也就理解了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值