指针作为形参肯定有很多都不清楚其中具体的原理,我也是最近摸清了些门道:
下面就用一些例子来给大家说明:
void myMalloc(char *s) //我想在函数中分配内存,再返回
{
s=(char *) malloc(100);
}
void main()
{
char *p=NULL;
myMalloc(p); //这里的p实际还是NULL,p的值没有改变,为什么?
if(p) <span style="font-family: Arial, Helvetica, sans-serif;">free(p); </span>
}
上面其实是给他的拷贝体进行了内存地址分配
void myMalloc(char **s)
{
*s=(char *) malloc(100);
}
void main()
{
char *p=NULL;
myMalloc(&p); //这里的p可以得到正确的值了
if(p) free(p);
} 因为这里形参分配的内存其实是给s本身在分配了 ,上面分配的时候用的是(*s)
#include<stdio.h>
void fun(int *p)
{
int b=100;
p=&b;
}
main()
{
int a=10;
int *q;
q=&a;
printf("%d/n",*q);
fun(q);
printf("%d/n",*q);
return 0;
} 这里打印的结果为: 10 10
为什么呢? 因为main函数中q指针作为形参传递给了fun函数,fun函数中p为q指针的拷贝体,f
fun函数中的p在函数体中重新指向了整数b的地址。所以q指针本身的值是没有发生变化的
#include<stdio.h>
void fun(int *p)
{
*p=100;
}
main()
{
int a=10;
int *q;
q=&a;
printf("%d/n",*q);
fun(q);
printf("%d/n",*q);
return 0;
} 这里可以正确打印我们想要的结果了,因为main函数中的q指针和形参中的p指针都指向了整数a的地址。
fun函数中其实是修改整数a地址中的值,所以在后文中打印指针q中的内容时,也能打印出100了
原文地址:http://blog.csdn.net/qingzai_/article/details/44196287