C语言学习之指针高级

函  数

 

(一)
 参数:当函数想使用主函数中的变量时,则
      将主函数中的变量作为参数传递给函
   数内部

 返回值:当主函数想使用函数中的变量或者
   数据时,则将函数内部的数据或变量
   作为返回值返回给主函数使用

 1.函数的传参
  1.复制传递
   实参将值复制一份并给相应的形参
   对形参的操作和实参没有任何关系

  2.地址传递
   如果函数体内部想操作主函数中的
   变量,则把主函数的地址传递给函
   数                                    

  3.全局变量传递
   
  4.整型数组的传递
   1.int fun(int * a, int len)
    传递数组首地址和数组长度
   2.int fun(int a[], int len)
    传递数组名和数组长度

   maopao_input();
   maopao_order();
   maopao_output();

  5.结构体的传递
  
  typedef作用:
   给数据类型定义一个别名

  6.字符数组的传递
  字符数组只需传递数组名,不需要传递
  字符数组的长度,因为字符数组中保存
  着用于标识字符串结尾的'\0'字符

  7.总结
   1.实参的类型决定形参的类型
   2.函数的功能决定实参传入的个数
   3.函数的返回值类型是由return
     后面的数据类型决定的
   4.功能决定函数的返回值
 
  zhangsan;m;1000;90
 
 2.函数指针和指针函数
  1.函数指针是一个指针,这个指针指向
    一个函数的地址
    char (*fun)(int a, int b);

  2.指针函数是一个函数,这个函数的返
    回值是一个指针
    char *fun(int a, int b);

 

 

(二)

1.主函数的传参
 int main(void);
 int main(int argc, char *argv[]);
 1.argc:
  传入参数的个数(1 - n)
 2.argv:
  1.指针数组,每个数组元素保存传入主函数
    的字符串首地址
  2.通过argv[0],argv[1] ... argv[n]利用
    %s的形式输出第1个,第2个 ... 第n个字
    符串

2.宏函数
 #define MAX(a,b) a>b?a:b

 宏函数和函数的区别:
 1.宏函数没有参数类型的概念,并且只是完成
   程序的简单替换
 2.宏函数是代码的简单替换,所以程序会变长
   增加存储空间
 3.宏函数相比于函数是代码替换,执行效率比
   较高
 4.函数是在链接时处理的代码,函数的执行需
   要有参数传递,和压栈出栈的操作
 5.函数的使用能够节省存储空间,但是因为需
   要压栈和出栈操作所以执行效率不高

内存管理
 
 环境变量及系统参数区
 堆区
 栈区
 数据区
  常量区
  初始化静态变量区
  未初始化静态变量区
 文本区

 数据区:
  1.保存常量
  2.保存静态变量 static int a
  3.保存全局变量  
 
 栈区:
  1.操作系统自动管理的区域(申请,释放内存)
  2.栈区通常用来存放局部变量
  3.栈区中的数据未经初始化之前是随机值

 堆区:
  1.程序员手动管理的内存区域(申请,释放)
   申请malloc    stdlib.h
   释放free  stdlib.h
  2.堆区中的数据一旦使用malloc函数申请,在没有
    经过free函数的释放之前不能被操作系统回收
    资源

 C语言中有2种方式获得内存
  1.定义变量 可以通过指针和变量名
  2.malloc 只能通过指针来操作

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值