实参是指针,如何在函数内部改变指针
了解了函数传参的3种方式之后,现在来讨论一个问题,就是如果指针做实参,要在函数内部改变指针,应该怎么传参呢?
比如下面这段代码:
int main(void)
{
char *p = NULL;
get_memory();//如何定义get_memory函数和传参p
strcpy_s(p, 100,”hello world”);
printf(“%s\n”, p);
free(p);
p=NULL;
}
我们需要实现一个get_memory的函数,为main函数中的实参p分配一段100字节的内存,然后用来拷贝字符串”hello world”。这个过程,实际上就是在修改指针p的值(地址),以为开始p的值为NULL,通过get_memory函数分配内存之后,指针的值就是堆上的一个分配的内存地址。这个时候,指针作为实参,要修改实参,必须传实参的地址或者引用,也就是需要传指针的地址(也就是二级指针),或者指针的引用。
因此get_memory函数设计如下:
1,传指针的指针(二级指针):
void get_memory(char **p)
{
*p=(char *)malloc(100);
}
调用方式:
get_memory(&p);
2,传指针的引用:
void get_memory(char *&p)
{
p=(char *)malloc(100);
}
调用方式:
Get_memory(p);