C语言知识点(1)------数据声明

1、& 和 | 不同于&& 和 ||
& 和 |:是按位运算符
&& 和 ||:逻辑运算符
我们常常在if判断语句中使用,基本上没出现过问题,是因为我们判断的结果都是0和1,所以按位运算和逻辑运算结果一样;
if(i == "1" && j == "2")和if(i == "1" & j == "2")运行结果相同
但是如果是在平时的运算而不是逻辑判断中就会大不相同;
i = 8;
j = 4;
k1 = i || j;    //12
k2 = i | j;      //1

2、数据声明(这是一个难点,很多一知半解的人搞不清楚,很考指针,在面试题中也经常遇到)
a) 一个整型数
b)一个指向整型数的指针
c)一个指向指针的的指针,它指向的指针是指向一个整型数
d)一个有10个整型数的数组
e) 一个有10个指针的数组,该指针是指向一个整型数的。
f) 一个指向有10个整型数数组的指针
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

答案:
int a;
int *a;
int *(*a);
int a[10];
int *a[10];
int (*a)[10];
int (*a)(int);
int (*a[10])(int);

ps:不理解的可以在看下面的指针学习再来看看。

 

这两个知识点刚刚开始看到会出现一脸懵逼的感觉,但是仔细琢磨你可以学习到很多,让你在指针研究上很深一步的了解。

2、函数声明:
解释(* (void (*)()))0)();

首先具备的知识:
如何声明一个类型和指针类型
变量声明
float f,g;         //    是声明f/g为float类型
则 float ((f));    //是声明f为float类型,括号并不影响
float ff();    //是返回一个float类型的函数。
float *pf;    //说明*pf就是float类型,而pf就是指向float的指针,也就是指向地址。float* pf;    //与上一个是一样的表示
函数声明
float *pf();    //表示函数返回值为一个指向float的指针(指针函数);也可以这样表示float *(pf()) ;= float *( PF );// PF = *pf ;
float (*ph)();//ph是一个函数指针(还是一个指针),是指向函数的指针,函数的返回值为float;
(float (*)()) 或者(float (*void)())表示一个返回值为float类型的函数的指针的类型转换符(与int类型,是一个声明);
分析(* (void (*)()))0)();可知(void (*)()))与上述一致,不过返回值为float,当typedef (void (*)())) V;
则原式子为 (* V 0)()  
V 0表示把0的类型强制转换为V型
相当于(*pf)();
可以看出这是在调用函数(相当于(*fun)();).

3、指针学习
用优先级规则分析下面例子:
char * const *(*next)();
1、从next可以看出,这是一个函数的函数名,
2、(*next)()知这是一个函数指针
3、const *(*next)()返回值是*const,也就是说,返回值是一个指针;
4、char *可知,const指针指向的是一个指向char的指针;
总结:是一个指向函数的指针(函数指针),函数返回一个指针,改指针指向一个只读的指向char的指针

反过来就可以推数据声明的题目了。

这是《C专家编程》里面的学习声明类型方法可以学习一下,能理解最后,不能就算了,就一个一个来分析。

abab

 

 

 

 

 

 

 

 

 

练习1:a+++++b是什么含义
 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值