下午看博客时候,遇到个函数传参值是否改变的问题,感觉挺有意思的。
先看这样一个程序。
#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);
}
运行结果:

博客探讨了C语言中函数参数传递时指针与多级指针的区别。通过示例代码展示了当传入普通指针和二级指针时,函数内部对指针地址的修改如何影响外部变量。文章强调了理解指针和多级指针在函数调用中的行为对于编写正确代码的重要性。
9875

被折叠的 条评论
为什么被折叠?



