#include <iostream>
typedef int * LPINT;
int * gp;
void f1(int ** pptr)//使用了二重指针就能去改变*pptr的指向内容,如果像f2仅使用int * ptr是不能实现的。指针作形参,本质是传递地址值,而不是指针变量,如果想试图像变量一样使用,那就有两种方法解决:1. 二重指针; 2. 将指针进行typedef,在传参数时引用传参
{
*pptr = (int *)malloc(sizeof(int));
gp = *pptr;
}
void f2(int * ptr)
{
ptr = (int *)malloc(sizeof(int));
gp = ptr;
}
void f3(LPINT & ptr)
{
ptr = (int *)malloc(sizeof(int));
gp = ptr;
}
int main()
{
int * ptr = NULL;
f1(&ptr);
std::cout << std::boolalpha << (ptr == NULL) << std::endl;//不为空,因为f1传递的是指针的指针
free(gp);
int * ptr2 = NULL;
f2(ptr2);
std::cout << std::boolalpha << (ptr2 == NULL) << std::endl;//仍为空,因为f2传递的是指针(地址),是值传递
free(gp);
int * ptr3 = NULL;
f3(ptr3);
std::cout << std::boolalpha << (ptr3 == NULL) << std::endl;//不为空,因为f3传递的是指针的引用(可以理解成指针变量的传递)
free(gp);
return 0;
}
指针作形参、二重指针作形参和先对指针进行typedef后用别名的引用作形参
最新推荐文章于 2022-10-12 21:54:49 发布