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;