学习linux C的数据类型及运算符,表达式所遇见的问题及解答

1.对于下列代码中,p里面装的是什么?*p又是什么?&p又是什么?

int add=0x12345678;

int *p=(int*)add;

答:p里面装的是0x12345678的二进制数,并以地址的方式表现出来,代表地址0x12345678。*p是通过*去访问地址0x12345678这个地址处的数据。&p是取出整形指针变量p的地址,这里p的地址并不是0x12345678,而是它自己的地址。

2.关于“形参变量是属于被调函数的局部变量,实参变量是主调函数的局部变量”这句话中的被调函数和主调函数分别指的是什么?主调函数和主函数的区别?

答:主调函数指的是调用了已定义的其他函数的函数,而被调函数是指被其他函数调用的函数。主函数和主调函数的区别在于:主函数一定是主调函数,而主调函数不一定是主函数。例如:main函数调用了自定义函数a,函数a又调用了函数b,则a函数是main函数的被调函数,a函数又是b函数的主调函数。

3.关于全局变量的使用方法?

答:在函数中使用全局变量,一般要做全局变量说明,没有做说明的全局变量是无法使用的,全局变量的说明符为extern。但如果在一个函数之前定义的全局变量,在该函数内使用可不加说明注:同一源文件中,全局变量与局部变量同名,则在局部变量的作用范围内全局变量(外部变量)不起作用

4.定义和声明的区别?

答:定义是指创建了一个对象(变量),为这个对象(变量)分配一块内存并取一个名字,则这个名字就和这个内存以及这个内存的地址一起绑定起来了。一个对象(变量)在一定的区域内(如函数内,全局内)只能被定义一次。

声明含义:(1)通知编译器,这个名字已经与一块内存绑定了,及该变量已经在别处定义过了。声明可以多次出现。(2)通知编译器,这个名字已经被预定,其它地方不能再用它做变量名。

5.用static修饰局部变量和全局变量有什么效果?

答:(1)一般情况下,局部变量是存放在栈区,在该语句块执行结束时局部变量的生命周期便结束了。而加了static修饰后,该变量就存放在静态数据区,其生命周期会持续到整个程序执行结束为止。但局部变量的作用域并没有改变,仍是限于原来的语句块。(2)用static修饰全局变量主要是为了改变其作用域的范围,由使用了extern声明后作用于整个工程变为仅作用于本源文件。

6.如何辨别下列const修饰的变量?

(1)const  int  *p;(2)int  *  const  p;(3)const  struct  devices  dev【5】;(4)struct devices const *  dev【5】;

答:第一步:将类型去掉;第二步:看const修饰谁,谁的值就不能修改。(1)去掉类型int,const修饰*p,即p所指向的空间里的值不变。(2)去掉类型int*,const修饰p,即指针变量p里的值不变,即p指向的地址不能变,但p指向的空间里的值可变。(3)去掉类型struct devices,const修饰dev【5】,dev【5】数组里的值不变。(4)去掉struct devices,const修饰*dev【5】,指针数组dev中的每个元素指向的空间里的值不变

7.运算符的优先级问题?

:同一优先级的运算符,运算次序由结合方向所决定。即:!>算术运算符>关系运算符>&&>||>赋值运算符

8.条件运算符使用时有哪些注意事项?

:(1)条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值运算符;(2)条件运算符“?”和“:”是一对运算符,不能分开单独使用;(3)条件运算符的结合方向是自右至左

9.C语言中提供的6种位运算符分别是那些?

答:(1)按位与运算符“&”是双目运算符。其功能是参与运算的两个数字对应的二进制位相与。只有对应的两个二进制位均为1时,结果位才为1,否者为0。(2)按位或运算符“|”是双目运算符。其功能是参与运算的两个数字对应的二进制位相或。只要对应的两个二进制位有一个为1时,结果位就为1,否者为0。(3)按位异或运算符“^”是双目运算符,功能是参与运算的两个数字对应的二进制位相异或。当对应的两个二进制位相异时,结果位为1。(4)左移运算符“<<”是双目运算符,其功能是把“<<”左边的运算数的各二进制位全部左移若干位,由“<<”右边的数指定移动位数,高位丢弃,低位补0。右移运算符“>>”也是双目运算符,其功能是把“>>”左边的运算数的各二进制位全部右移若干位,由“>>”右边的数指定移动位数。但对于有符号数,在右移时,符号位将随同移动,当为正数时,最高位补0;而为负数时,符号位为1,最高位是补0或是补1取决于编译系统的规定。

10.使用位操作的优点是什么?

答:(1)使用位操作可以减少除法运算和取模运算,从而有效提高程序运行的效率。(2)在嵌入式编程中,它的一个最典型且使用广泛的是位间的与(&),或(|),非(~)操作。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值