您的位置:首页 > 编程语言 > C语言/C++

c语言数据类型和运算符、表达式的十个问题

2018-01-24 22:43 399 查看
1.全局变量与局部变量的区别以及两者的优先级关系

   区别:全局变量作用于整个源程序文件,而局部变量只是作用于某个具体的函数内。在c语言中,main函数的局部变量也仅能在main函数中使用,在其他函数中亦不可使用。

  优先级关系:当在同一个源文件中时,若外部变量和局部变量同名,则在局部变量的作用范围内,外部变量被屏蔽,不起作用。

2.关于常量以及const int *p以及 int * const p的区别

   常量所在内存空间被加上了只读属性,因此其值不会变;对于const的处理:将除了const的语句外的类型修饰符去掉即可。  const int *p去掉int后就是const *p,因而p指向的空间的值不会变;然而,int
* const p去掉int *之后就变得不一样了。 const p即p不可再变,p不可指向别的地址,但是p所指向的内容可变。

3.声明与定义的区别

   定义的形象的理解就是一旦一个对象被分配到一个内存,那么这个名字就和这块内存匹配起来,永远只能定义一次;至于声明的理解需要分为两个层面:第一点,声明可以出现多次;第二点,别的地方不可再用它作为变量名或对象名。

4.寄存器变量的使用

   程序是保存在内存中的,因为cpu的速度远远快于内存和寄存器,而寄存器的速度又要远远快于内存(与两者的物理结构和造价体积大小有关),因此在操作过程中一般是cpu先从内存取出数据到寄存器中,运算完后再送回到内存中。在我们设置寄存器变量的过程中,考虑到寄存器的速度快,因此寄存器变量的优势在此。

 但是寄存器变量不可设置太多,一方面因为寄存器可能被其他程序占用;另一方面寄存器变量必须是cpu能接收的类型。我们还要注意到寄存器变量是没有地址的,因而不可以使用区地址符。

5.typedef与#define的区别和联系

两者的联系typedef与#define两者都可以用来定义,两者的区别也很明显,对于typedef是为一个新的类型起新名字,但是对于#define只是简单的字符串替换。因而在涉及到有指针最好用typedef,当有表达式则必须加个括号才能成功定义。

6.构造类型

   构造类型分为三类:数组类型、结构类型、公用类型;

   数组类型是由相同类型的数据构成;结构类型可以由不同类型构成;不同数据不会同时使用为了节约内存,不同数据占用同一内存,就是公用类型。

7.关于运算符优先级的记忆方法

  !>算术运算符>关系运算符>&&>||>赋值运算符

8.关于逻辑运算符

则整个事件也就为假;同时只要A为  对于||而言,只要A||B中,A事件为真,则B事件就不需要再考虑,则整个事件也就为真;A事件为假,则整个事件也就为假。书中例子:if((++i>0)||(++j>0)),如果(++i)>0,如果为真则不再计算。

9.关于条件运算符

  条件运算符的一般形式是:表达式1?表达式2:表达式3

 其含义很简单,若表达式1为真,则以表达式2的值作为表达式的值,否则是表达式3的值作为返回值;其次要注意条件表达式的优先级虽然低于关系运算符和算术运算符,但是要高于赋值符。

10.关于(++i)和(i++)的区别

   如果有表达式a=i++,则其等价于a=i; i=i+1;如果有表达式a=++i ,则其等价于 i=i+1;a=i;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  liunx