C语言-学习心得(2)

时间:2022-09-08 16:22:09

扫盲后总结出来的要点[1] :http://blog.csdn.net/qq1130141391/article/details/40117303


下面是我扫盲后总结出来的要点:

1、C语言的函数不等同于数学的函数

在数学中函数y=2x+1,x作为输入值,y作为结果。在编程上看,x是入参,y是返回值(return value)。

在C语言中,实现y=2x+1是绝对是没有问题的。如代码:

 C语言-学习心得(2)

  但如果入参是一个大数据(如结构体,大小是相对基本数据类型来说的)作为入参,如代码:

  C语言-学习心得(2)

    虽然这样用C语言来实现的代码也是没问题,但是C语言并推崇这种实现方式。为什么呢?效率低!

    C语言推崇如下实现方式:

    C语言-学习心得(2)

      这两段代码主要的区别在于参数是如何传递的。

      第一段代码 : 需要额外开辟一段COMM_PARA类型的临时内存,并进行赋值操作(将入参赋值给这个临时内存)

      第二段代码 : 没有产生额外的临时内存(当然指针是占内存的,函数的参数传递机制也产生一个临时的指针),

                   只是获取入参的首地址。

      对比这两段代码,无疑第二段代码的效率更高。

2、C语言的数据是异地操作的

  这话是说得过于绝对了,像[1]中的y=2x+1的数据没有异地操作。

只是C语言中,设计的很多函数都是异地操作的,C语言喜欢这样的设计方式,效率高嘛!

如代码:

C语言-学习心得(2)

从这段代码,可以看到,变量stCommPara是在main函数中获得内存的(地方1),

在Comm_InitPara函数中修改stCommPara的值(地方2),这样就完成在地方2

修改地方1的变量(分配的内存)。

这里异地操作是通过指针传递参数实现的,高效,C语言推崇的。