#include "stdio.h"
#include "stdlib.h"
void malloc_fun(int **p2)
{
*p2 = malloc(1);
}
void malloc_p1_test(void)
{
int *p1 = NULL;
printf("示例1:通过二级指针在函数内部进行内存分配\r\n");
malloc_fun(&p1);
if( p1 == NULL )
{
printf("分配失败\r\n");
}
else
{
printf("分配成功,p1 = %#x\r\n", p1);
}
}
int a = 100;
int b = 50;
int *p1 = &a;
void change_p1(int **p2)
{
*p2 = &b;
}
void change_p1_err(int *_p1)
{
_p1 = &b;
}
void chang_p1_test(void)
{
printf("示例2:通过二级指针使用函数改变指针的指向\r\n");
printf("错误的示例:\r\n");
printf("改变指向之前");
printf("*p1 = %d\r\n", *p1);
change_p1_err(p1);
printf("改变指向之后");
printf("*p1 = %d\r\n", *p1);
printf("正确的示例:\r\n");
printf("改变指向之前");
printf("*p1 = %d\r\n", *p1);
change_p1(&p1);
printf("改变指向之后");
printf("*p1 = %d\r\n", *p1);
}
int main(void)
{
malloc_p1_test();
chang_p1_test();
return 0;
}
总结: 通过一级指针在作为实参传入函数时,如果需要在函数内部改变一级指针的指向,函数的形参就需要使用二级指针,如果函数形参使用的是一级指针,就是值传递,值传递在函数里面改变的是形参的值,而不是实参的指向。
|