读书人

三个关于c语法的有关问题多谢

发布时间: 2014-01-12 00:03:16 作者: rapoo

三个关于c语法的问题,谢谢
本帖最后由 u013410394 于 2014-01-07 19:05:22 编辑 1.typedef int32_t (*a)(void); 这里表示什么?

2.a_b a=s->c->a; 后面的这个->传递什么呢

3.#define w(){ \
*(ushort *)(config + 0x100e)= 0x556c; \ 这里的\表示什么?
}

这里的三个问题,希望大神帮忙解答下,谢谢。

[解决办法]
1)定义函数指针类型 a,即给函数指针类型 int32_t (*)(void) 类型起个名字,叫做 a;
这个看任何一本C语言的书,就知道了。

   typedef int32_t (*a)(void);  
int32_t fun(){return 0;};
int main(){
a *pfun = fun; //这是初始化a 类型指针
printf("pfun() = %d",
pfun()//这是通过函数指针调用函数。
);
return 0;

}

2)这是指向运算符-> ; c->a 相当于 (*c).a ,这个看任何一本C语言的书,就知道了,前者是后者的简化写法,后来就固定为一个运算符了。
3) \ 是续行符 ,表示这行代码没结束,下一行的和这一行,实际是同一行代码。
PS:
只有3)比较偏僻,1)2)只要看书能够知道。

[解决办法]
引用:
谢谢大神,你已经讲得很详细了,可是我还得细细想想,第一个和第二个还不是特别懂,第二个的a->b->c这样死连续调用吗

是的,a->b的返回值在调用c
[解决办法]
学然后知不足。
[解决办法]
引用:
3也不能算偏!基础没有看啊

3)应该有点偏的。
理由如下:
a) 很多入门书(可能很垃圾)不会讲续行符的,毕竟这不是一种运算符,也不是普通的分隔符。
多半都是用在宏定义的地方。
b)虽然,续行符,可以用在任何其他地方,基本上,别的地方都不会用续行符。
因为通常来说,不用续行符,和使用续行符,没有多大区别,除非用于宏定义。

c)相信,没有几个人,在非宏定义中,使用续行符。
所以,有些入门书不讲续行符,也是有谅可原的。



读书人网 >C语言

热点推荐