第43课 - 函数的意义

1、C语言中的函数 

        函数的由来 


                函数用来定义算法


2、函数的意义 

            模块化程序设计



        C语言中的模块化 



3、面向过程的程序设计 

            面向过程是—种以过程为中心的编程思想

            首先将复杂的问题分解为—个个容男解决的问题 

            分解过后的问题可以按照步骤—步步完成 

            函数是面向过程在C语言中的体现 

            解决问题的每个步骤可以用函数来实现 


4、声明和定义 

            声明的意义在于告诉编译器程序单元的存在 

            定义则明确指示程序单元的意义 

            C语言中通过extern进行程序单元的声明 

            —些程序单元在声明时可以省略extern 


                     严格意义上的声明和定义并不相同!


5、实例分析 

声明和定义不同     43-1.c

43-1.c

  1. #include <stdio.h>  
  2. #include <malloc.h>  
  3.   
  4. extern int g_var;  
  5.   
  6. extern struct Test;  
  7.   
  8. int main()  
  9. {  
  10.     extern void f(int i, int j);  
  11.     extern int g(int x);  
  12.       
  13.     struct Test* p = NULL; // (struct Test*)malloc(sizeof(struct Test));  
  14.       
  15.     printf("p = %p\n", p);  
  16.       
  17.     //g_var = 10;  
  18.       
  19.     printf("g_var = %d\n", g_var);  
  20.       
  21.     f(1, 2);  
  22.       
  23.     printf("g(3) = %d\n", g(3));  
  24.       
  25.     free(p);  
  26.       
  27.     return 0;  
  28. }  


global.c

  1. #include <stdio.h>  
  2.   
  3. int g_var = 10;  
  4.   
  5. struct Test  
  6. {  
  7.     int x;  
  8.     int y;  
  9. };  
  10.   
  11. void f(int i, int j)  
  12. {  
  13.     printf("i + j = %d\n", i + j);  
  14. }  
  15.   
  16. int g(int x)  
  17. {  
  18.     return (int)(2 * x + g_var);  
  19. }  


            

                即可省略extern 直接用struct Test声明

                若  struct Test* p = (struct Test*)malloc(sizeof(struct Test));

            

        不能依赖于文件的编译顺序,当先编译43-1.c时,只是声明struct Test

        告诉编译器存在该结构体,当编译sizeof(structTest)时,编译器不能从

        其它文件获取它的类型大小信息

        若修改:global.h里float g_var=10;

                        

        当编译器发现extern int g_var;当使用g_var时,去定义处找到

        g_var, 以int型解释这四个字节的二进制数据(且%d)


6、小结 

            函数是面向过程思想在C语言中的体现 

            面向过程是由上至下分解问题的设计方法 

            程序中的定义和声明完全不同 

            C语言中通过extern对程序单元进行声明 


猜你喜欢

转载自blog.csdn.net/qq_39654127/article/details/80183189