这个问题一个较为妥善的方法是把数组定义在主函数,再传入数组地址给自定义函数,如果你非要在自定义函数里定义也行,至于是否需要设置为static,那得看情况,因为函数退出时栈空间并不是马上被刷新,如果你能保证该栈空间在你访问前没被释放就没必要定义为static,但是保险起见定义static更好,因为你可能不知道到底该内存是不是被重新写入了数据,至于你说要返回指向指针的指针,我举个例子,int
fun(),这个就是返回一个指向指针的指针,其指向的指针指向int型,呵呵,明白了没
假定你所谓的指针函数为 返回值类型为 指针的函数;
如 int func(void)
{
int ret_code;
ret_code = (int)malloc(sizeof(int));
return ret_code;
}
假设这么使用:
int pVal;
pVal = func(10);
函数返回的指针值赋给了变量pVal,可以这么说,函数返回的肯定是数值,他的类型是指向int变量的指针,即返回的数值被编译器解释为一个int类型变量的地址,在32位机器上,它通常占用四字节;
b->lchild 本身是指向btree类型变量的指针,它肯定是数值,但是该数值被编译器解释为另外一个btree型变量的地址;
有点拗口是吧,在《C专家编程》一书中有对指针的深刻论述,是C语言进阶学习的必备资料,在学习了C的基础后,就去阅读吧!(学校的图书馆会有的,如果很悲催的话,新华书店肯定有;当然,也存在电子版的)
祝你好运!
因为函数的返回值如果是一个基础类型的话是放在寄存器里面的,并不在内存中所以没有地址,但如果返回一个对象的寄存器中放的是它的地址,所以能对返回一个对象的函数取地址,但不能对一个返回基础类型的函数取地址
给你一个例子,是谭浩强的C语言程序设计P199页的一个例子:你可以找该书来参考:
------------------------------
/使用指向函数的指针/
#include <stdioh>
int max(int x,int y)
{
int z;
if(x>y){
z=x;
}else{
z=y;
}
return z;
}
int min(int x,int y)
{
int z;
if(x<y){
z=x;
}else{
z=y;
}
return z;
}
int add(int x,int y)
{
int z;
z=x+y;
return z;
}
/第三个参数为指向返回值为整型的函数的指针/
int process(int x,int y,int(fun)())
{
int result;
result=(fun)(x,y);
printf("[%d]\n",result);
}
int main(void)
{
int a,b;
printf("输入两个整数:\n");
printf("a=");
scanf("%d",&a);
printf("b=");
scanf("%d",&b);
printf("大的数为:");
process(a,b,max);
printf("小的数为:");
process(a,b,min);
printf("和为:");
process(a,b,add);
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)