扫盲后总结出来的要点[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语言来实现的代码也是没问题,但是C语言并推崇这种实现方式。为什么呢?效率低!
C语言推崇如下实现方式:
这两段代码主要的区别在于参数是如何传递的。
第一段代码 : 需要额外开辟一段COMM_PARA类型的临时内存,并进行赋值操作(将入参赋值给这个临时内存)
第二段代码 : 没有产生额外的临时内存(当然指针是占内存的,函数的参数传递机制也产生一个临时的指针),
只是获取入参的首地址。
对比这两段代码,无疑第二段代码的效率更高。
2、C语言的数据是异地操作的
这话是说得过于绝对了,像[1]中的y=2x+1的数据没有异地操作。
只是C语言中,设计的很多函数都是异地操作的,C语言喜欢这样的设计方式,效率高嘛!
如代码:
从这段代码,可以看到,变量stCommPara是在main函数中获得内存的(地方1),
在Comm_InitPara函数中修改stCommPara的值(地方2),这样就完成在地方2
修改地方1的变量(分配的内存)。
这里异地操作是通过指针传递参数实现的,高效,C语言推崇的。