C语言语法问题,声明以及星号的作用
请解释一下如下这句声明是什么意思:int(*GLib_Init)_ANSI_ARGS_((GLib_Interp*interp));另外,为什么星号后面有时有空格,有时没...
请解释一下如下这句声明是什么意思:
int (*GLib_Init) _ANSI_ARGS_((GLib_Interp * interp));
另外,为什么星号后面有时有空格,有时没有? 展开
int (*GLib_Init) _ANSI_ARGS_((GLib_Interp * interp));
另外,为什么星号后面有时有空格,有时没有? 展开
6个回答
展开全部
我理解的 * 在声明中用来声明其后跟的变量是一个指针变量,指针变量的值是一个地址
指针变量可能指向一个基本数据类型,也可能是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定义过
指针变量可能指向一个基本数据类型,也可能是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定义过
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个语句声明GLib_Init是个函数指针,这个函数返回int类型,带个参数GLib_Interp * interp
至于_ANSI_ARGS_应该是个宏之类的东西,不属于标准C++的,是你的代码库里的东西,从字面上看是对参数做的修饰处理,总之这整个语句是函数指针的声明
空格可以忽略,加多少空格都没关系
至于_ANSI_ARGS_应该是个宏之类的东西,不属于标准C++的,是你的代码库里的东西,从字面上看是对参数做的修饰处理,总之这整个语句是函数指针的声明
空格可以忽略,加多少空格都没关系
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
GLib_Init是函数指针,返回int类型的函数指针,函数的传入参数是GLib_Interp类型的指针,*前后的空格请无视它吧,没什么意义。_ANSI_ARGS_是宏定义 ,好像是表示函数里面所有的参数都是ascii码,呵呵,我也不是很清楚。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
_ANSI_ARGS_应该是一个宏,它应该是指明函数传参方式,请忽视它。
int func ((GLib_Interp * interp));能看懂吗?那么把func改为(*GLib_Init),那么就是声明一个函数指针,它指向的函数和func是同类型的。
星号、括号、标识符、类型标识符等都是语法符号,两个语法符号之间可以任意加空格、Tab、回车。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询