关于函数的参数问题

zhusirener 2006-10-13 05:12:49

main()
{ void f(int *a());
f(NULL);
}


void f(int *a())
{}
这样能通过,为什么下面的不能通过呢?









#include<stdio.h>
#include<stdlib.h>
void f(int *());
int *a();
void main()
{

f(int *a());


}
int *a()
{
int *p=(int *)malloc(4);
*p=2;
return p;
}

void f(int *p)
{
int i=5;
p=&i;
printf("%d",*p) ;
}
...全文
170 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhusirener 2006-10-13
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
void f(int *()); //只是说明这个参数是函数指针,类型是 typedef int(*FUNPTR)()
int *a();
void main()
{

//f(int *a()); //函数调用采用,这里“int *a()”还是说明他是类型,而不是指针
f(a);//或者f(&a);都是可以的

}
int *a()
{
int *p=(int *)malloc(4);
*p=2;
return p;
}

void f(int *p)//这里不对了,f的参数是指向函数的指针,不是指向整型的指针,f(int*p())就对了,a_b_c_abc1() 的对。
{
int i=5;
p=&i;
printf("%d",*p) ;
}
在这里能学到好多东西呀,谢谢大家!!!!!!!!!!
Arthur_ 2006-10-13
  • 打赏
  • 举报
回复
函數傳遞實參
不能把類型也傳過去阿
doudouHuY 2006-10-13
  • 打赏
  • 举报
回复
f(int *a());
调用的时候实参应该传入函数名,也就是函数地址
a_b_c_abc1 2006-10-13
  • 打赏
  • 举报
回复
或者:

#include<stdio.h>
#include<stdlib.h>
void f();
int* a();
void main()
{
//f(int *a());
f(a);
}
int *a()
{
int *p=(int *)malloc(4);
*p=2;
return p;
}

void f()
{
int *pn=a();
//int i=5;
//p=&i;
printf("%d\n",*pn) ;
}
a_b_c_abc1 2006-10-13
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
void f(int *());
int *a();
void main()
{
//f(int *a());
f(a);
}
int *a()
{
int *p=(int *)malloc(4);
*p=2;

return p;
}

void f(int* p())
{
int *pn=p();
//int i=5;
//p=&i;
printf("%d\n",*pn) ;
}
dhy311 2006-10-13
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
void f(int *()); //只是说明这个参数是函数指针,类型是 typedef int*(*FUNPTR)()
int *a();
void main()
{

//f(int *a()); //函数调用采用,这里“int *a()”还是说明他是类型,而不是指针
f(a);//或者f(&a);都是可以的

}
int *a()
{
int *p=(int *)malloc(4);
*p=2;
return p;
}

void f(int *p)
{
int i=5;
p=&i;
printf("%d",*p) ;
}
dhy311 2006-10-13
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
void f(int *()); //只是说明这个参数是函数指针,类型是 typedef int(*FUNPTR)()
int *a();
void main()
{

//f(int *a()); //函数调用采用,这里“int *a()”还是说明他是类型,而不是指针
f(a);//或者f(&a);都是可以的

}
int *a()
{
int *p=(int *)malloc(4);
*p=2;
return p;
}

void f(int *p)
{
int i=5;
p=&i;
printf("%d",*p) ;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧