数据类型、运算符、表达式问题解答

1、局部变量和全局变量的区别:
局部变量也称内部变量,局部变量是在函数内做定义说明的,其作用域仅限于函数内,离开该函数后再使用这种变量是非法的。全局变量也称外部变量,它是在函数外部定义的变量,它不属于哪个函数,它属于一个源程序文件,其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明,只有在函数内经过说明的全局变量才能使用。全局变量的说明符为extern,但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。如果在同一源文件中,外部变量和局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即它不起作用了。


2、变量的定义及特点:
其值在其作用域内可以改变的量称为变量。变量在使用之前必须定义,每个变量都有自己的地址。变量的值可以发生改变,意味着它可以被覆盖,被写入,被赋值。每个变量必须有一个名字和它所在内存空间绑定。变量名在变量声明的时候,该名字就和内存中一块地址绑定在一起。


3、声明与定义的区别:
定义是(编译器)创建一个对象,为这个对象分配一块内存并给它取上一个名字,这个名字就是我们常说的变量名或对象名。一个变量或对象在一定区域内只能被定义一次,如果定义多次,编译器会提示你重复定义同一个对象或变量。声明有两重含义:第一重:告诉编译器,这个名字已经匹配到一块内存上了,声明可以出现多次。第二重:告诉编译器,我这个名字先预定了,别的地方再也不能用它来作为变量名或对象名。


4、static修饰变量和函数的注意点:
static修饰局部变量(局部变量是存放在栈区),该变量便存放在静态数据区,其生命周期持续到整个程序执行结束为止。虽然用static对局部变量进行修饰后,其生命周期和存储空间发生了变化,但是其作用域并没有改变,其仍然是一个局部变量,作用域仅限于该语句块。用static修饰函数的话,情况与修饰全局变量大同小异,就是改变了函数的作用域。


5、extern的有无是否对判断声明有影响?
在任何函数体外声明或定义变量时,不加extern可能是定义也可能是声明,编译器选择初始化的那个(最多一个地方对它进行了初始化),如果没有初始化则任选其中一个作为定义,其他为声明,但是加extern肯定是声明;如果不想让其他源文件链接到,则需要使用static关键字。在函数体内的声明使用其他源文件中定义的变量时,必须使用extern关键字,因为在函数体内默认为局部变量。


6、typedef的目的:
typedef为C语言的关键字,其作用是为一种数据类型定义一个新名字。一个是给变量一个易记切意义明确的新名字;另一个是简化一些比较复杂的类型声明。


7、一些容易出错的优先级问题:
(1).的优先级高于*, ->操作符用于消除这些问题
(2)[]高于*
(3)函数()高于*
(4)==和!=高于位操作
(5)==和!=高于赋值符     
(6)算术运算符高于移位运算符   
(7)逗号运算符在所有运算符中优先级最低


8、 ||和&&运算符的含义:
||:两个表达式只要有一个真,整个表达式的值就为真。 两个表达式只要有一个假,整个表达式的值就为假。
&&:两个表达式的值都为真,整个表达式的值才为真。


9、++ 和 -- 作为前缀和后缀的区别:
 其作为前缀是先自加或者自减,然后在做别的运算。
 其作为后缀是在本计算单位结束之后再自加或自减。


10、左移和右移的区别:
左移运算符"<<"是双目运算符,其功能把"<<"左边的运算数的各二进制位全部左移若干位,由”<<”右边的数指定移动的位数,高位丢弃,低位补0。右移运算符">>"是双目运算符,其功能是把">>"左边的运算数的各二进制全部右移若干位,由">>"右边的数指定移动的位数,但是对于有符号数,右移时,符号位将随同移动,为正数时,最高位补0,而为负数时,最高位补1,最高位补1或0取决于编译系统的规定。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值