您的位置:首页 > 其它

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

2018-01-24 22:03 316 查看
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取决于编译系统的规定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: