C语言语法问题,声明以及星号的作用

请解释一下如下这句声明是什么意思:int(*GLib_Init)_ANSI_ARGS_((GLib_Interp*interp));另外,为什么星号后面有时有空格,有时没... 请解释一下如下这句声明是什么意思:

int (*GLib_Init) _ANSI_ARGS_((GLib_Interp * interp));
另外,为什么星号后面有时有空格,有时没有?
展开
 我来答
吉祥二进制
高粉答主

2015-05-24 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84584

向TA提问 私信TA
展开全部

声明一个变量或者函数只是将变量名或者函数名标识符的有关信息告诉编译器,使编译器“认识”该标识符,而并一定分配内存。


在C语言中星号(*)一般有两种意义,一种是和指针相关,用于声明或者作为指针的间接运算符,一种是算术运算符,表示乘法。

 

int main()
{
int a = 2;
int *p = &a; //用于指针的定义
a = *p * a; // 从左到右第1个*表示指针间接运算符,第2个*表示乘法
return 0;
}
百度网友9e5be11
2013-08-14
知道答主
回答量:3
采纳率:0%
帮助的人:2.8万
展开全部
我理解的 * 在声明中用来声明其后跟的变量是一个指针变量,指针变量的值是一个地址
指针变量可能指向一个基本数据类型,也可能是struct,也可能是函数等
比如
int* p; //p 指向一个整数的指针变量
int (*f_p)(char) //f_p 函数指针,函数形式是 返回值:int 形参:char

*后的空格可有可无 int* p; 和 int *p是一样的

我查了下,好像是这样
_ANSI_ARGS_是个宏的定义
#define _ANSI_ARGS_(x) x

所以其实是
int (*GLib_Init) (GLib_Interp * interp);

那么这句声明意思是
声明了一个函数指针变量,名字叫 GLib_Init
它指向的函数形式 返回值:int类型 形参:GLib_Interp类型 形参名字interp
估计GLib_Interp类型在前边用typedef定义过
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhangqingxian
2013-08-14 · TA获得超过268个赞
知道小有建树答主
回答量:362
采纳率:0%
帮助的人:309万
展开全部
这个语句声明GLib_Init是个函数指针,这个函数返回int类型,带个参数GLib_Interp * interp

至于_ANSI_ARGS_应该是个宏之类的东西,不属于标准C++的,是你的代码库里的东西,从字面上看是对参数做的修饰处理,总之这整个语句是函数指针的声明

空格可以忽略,加多少空格都没关系
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
starking1983
2013-08-14 · TA获得超过278个赞
知道小有建树答主
回答量:112
采纳率:0%
帮助的人:69.5万
展开全部
GLib_Init是函数指针,返回int类型的函数指针,函数的传入参数是GLib_Interp类型的指针,*前后的空格请无视它吧,没什么意义。_ANSI_ARGS_是宏定义 ,好像是表示函数里面所有的参数都是ascii码,呵呵,我也不是很清楚。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yuantailing
2013-08-14 · TA获得超过2545个赞
知道小有建树答主
回答量:1167
采纳率:92%
帮助的人:666万
展开全部
  1. _ANSI_ARGS_应该是一个宏,它应该是指明函数传参方式,请忽视它。

  2. int func ((GLib_Interp * interp));能看懂吗?那么把func改为(*GLib_Init),那么就是声明一个函数指针,它指向的函数和func是同类型的。

  3. 星号、括号、标识符、类型标识符等都是语法符号,两个语法符号之间可以任意加空格、Tab、回车。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式