传入参数与传出参数

一层指针的参数

如果函数接口有指针参数,既可以把指针所指向的数据传给函数使用(称为传入参数),也可以由函数填充指针所指的内存空间,传回给调用者使用(称为传出参数)。有些函数的指针参数同时担当了这两种角色,既是传入参数又是传出参数,这称为Value-result参数。

传入参数

void func(const unit_t *p);

调用者

实现者

  1. 分配p所指的内存空间
  2. 在p所指的内存空间中保存数据
  3. 调用函数
  4. 由于有const限定符,调用者可以确信p所指的内存空间不会被改变
  1. 规定指针参数的类型unit_t *
  2. 读取p所指的内存空间

 

 

传出参数

void func(unit_t *p);

调用者

实现者

  1. 分配p所指的内存空间
  2. 调用函数
  3. 读取p所指的内存空间
  1. 规定指针参数的类型unit_t *
  2. 在p所指的内存空间中保存数据

Value-result参数

void func(unit_t *p);

调用者

实现者

1. 分配p所指的内存空间

2. 在p所指的内存空间保存数据

3. 调用函数

4. 读取p所指的内存空间

1. 规定指针参数的类型unit_t *

2. 读取p所指的内存空间

3. 改写p所指的内存空间

两层指针的参数

两层指针也是指针,同样可以表示传入参数、传出参数或者Value-result参数,只不过该参数所指的内存空间应该解释成一个指针变量。

两层指针作为传出参数还有一种特别的用法,可以在函数中分配内存,调用者通过传出参数取得指向该内存的指针:

调用者

实现者

  1. 分配pp所指的指针变量的空间
  2. 调用alloc_unit分配内存
  3. 读取pp所指的指针变量,通过后者使用alloc_unit分配的内存
  4. 调用free_unit释放内存
  1. 规定指针参数的类型unit_t **
  2. alloc_unit分配unit_t的内存并初始化,为pp所指的指针变量赋值
  3. free_unit释放在alloc_unit中分配的内存

 

posted @ 2018-04-08 00:09  刘-皇叔  阅读(699)  评论(0编辑  收藏  举报