C语言传递指针参数
1.什么是指针
简单来说,指针是一个存储计算机内存地址的变量。所有的指针都存储了内存地址。它们的类型只在取值时起作用。指针在C
语言中是个十分重要的概念,可以搜索相关资料进行深入学习,也可以参考 C语言指针简介 简单了解。
2.指针参数
C语言函数参数传递有两种方式,一种是传值调用,一种是传址调用。那么如果指针作为参数,应该怎么传递指针?可以参见下面的例子。
/* 编译器版本:
* 用于 x86 的 Microsoft (R) C/C++ 优化编译器 18.00.30723 版版权所有(C) Microsoft Corporation。保留所有权利。
*/
#include <stdio.h>
/* 错误版本,指针p是指针str的一个拷贝,所以这种方法仅初始化指针p,而对指针str无影响 */
void Allocate_wrong(char *p,int size){
printf("\n%x",&p);
printf("\n%x",p);
p=(char*)malloc(size);
}
void allocate(char **p, int size) {
printf("\n%x", &p);
printf("\n%x", p);
*p = (char*)malloc(size);
}
int main(void) {
char *str = NULL;
printf("\n%X", &str);
printf("\n%X", str);
allocate(&str, 100);
strcpy(str, "Hello World!");
printf("\n%s", str);
free(str);
return 0;
}
/*
输出结果:
1BF88C
0
1bf7b4
1bf88c
Hello World!
*/
从中我们可以看出,C语言中传递指针变量时,需要用到二级指针。示例中char **p = &str;
表明p是一个二级指针,*p
存放的是指针str
的地址。因此对*p
进行操作,也就是对str
进行操作。
3.总结
- 修改普通类型变量(如
int
、char
等),函数参数需要用一级指针; - 修改指针变量,函数参数需要用二级指针;
- 以上都是C语言里面的操作,当然C++可以用引用(例如
int *&p = str;
)。