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

请解释一下如下这句声明是什么意思:

int (*GLib_Init) _ANSI_ARGS_((GLib_Interp * interp));
另外,为什么星号后面有时有空格,有时没有?

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


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

 

int main()
{
int a = 2;
int *p = &a; //用于指针的定义
a = *p * a; // 从左到右第1个*表示指针间接运算符,第2个*表示乘法
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-14
我理解的 * 在声明中用来声明其后跟的变量是一个指针变量,指针变量的值是一个地址
指针变量可能指向一个基本数据类型,也可能是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定义过本回答被提问者采纳
第2个回答  2013-08-14
这个语句声明GLib_Init是个函数指针,这个函数返回int类型,带个参数GLib_Interp * interp

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

空格可以忽略,加多少空格都没关系
第3个回答  2013-08-14
GLib_Init是函数指针,返回int类型的函数指针,函数的传入参数是GLib_Interp类型的指针,*前后的空格请无视它吧,没什么意义。_ANSI_ARGS_是宏定义 ,好像是表示函数里面所有的参数都是ascii码,呵呵,我也不是很清楚。
第4个回答  2013-08-14

    _ANSI_ARGS_应该是一个宏,它应该是指明函数传参方式,请忽视它。

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

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

相似回答