下午看博客时候,遇到个函数传参值是否改变的问题,感觉挺有意思的。
先看这样一个程序。
#include "stdio.h"
#include "stdlib.h"
int a=1;
int b=2;
void fun(int * t)
{
t=&a;
}
void main()
{
int *q;
q=&b;
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("&a=%p\n",&a);
printf("&b=%p\n",&b);
fun(q);
printf("*q=%d\n",*q);
printf("q=%p\n",q);
}
看一下运行结果:
我们在函数里面改变指针q的地址,但是函数结束q并没有变。
我们再看这样改这个程序
#include "stdio.h"
#include "stdlib.h"
int a=1;
int b=2;
void fun(int ** t)
{
*t=&a;
}
void main()
{
int *q;
q=&b;
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("&a=%p\n",&a);
printf("&b=%p\n",&b);
fun(&q);
printf("*q=%d\n",*q);
printf("q=%p\n",q);
}
我将传参改成二重指针。
看一下运行结果。
也不知道这个用法用言语该咋说,上个例子来说吧!
#include <stdio.h>
#include <stdlib.h>
void fun(char ** t)
{
char *p;
p=(char *)malloc(512);
scanf("%s",p);
*t=p;
}
void main(void)
{
char * a;
fun(&a);
printf("%s\n",a);
}
运行结果: