|
int const *pci /*声明pci指向整型常量的指针*/
int * const cpi /*声明cpi为一个指向整型的常量指针*/
int const * const cpci /*无论是指针本身还是它所指向的值都是常量*/
4种不同类型的作用域:
文件作用域;函数作用域;代码作用域;原型作用域。
静态变量(static):存储于静态内存,不属于堆栈内存(函数的行参不能声明为静态,因为实参总是在堆栈中传递给函数)。
static用于函数定义时,或代码块之外的变量声明时,STATIC关键字用于修改标识符的链接属性,EXTERNAL---》INTERNAL
STATIC用于声名代码块内部的变量声明时,STATTIC关键字用于修改变量的存储类型,由自动变量---》静态变量
自动变量(automatic):存储于堆栈中。
注意:(在代码内部,不AUTO---》STATIC)修改存储类型并不表示修改该变量的作用域,它依然只能在该代码内部按名字访问。
register寄存器变量:存储于机器的硬件寄存器中。自动变量的初始化较之赋值语句效率并无提高---除非声明为const的变量之外。
int i=25; int i;
i=25; 两者只是风格不同。
int const i=25; int const i;
i=25; 前者效率更高。
左移操作:左移的位被丢弃,右边用0补起; <<
右移操作: >>
分两种情况:1.逻辑移位--左边用0填充;
2.算术移位--若符号为位1,则移入的位均为1;
若符号为位0,则移入的位均为0;
即此情况只有为负数时才不一样。
与:i&j
或:i|j
异或:i^j
a+=expression 与 a=a+(expression) 的区别:
前者的左操作数(a)只求值一次,而且+=的右侧EXPRESSION没有副作用。
int X;
sizeof (int) 求整数型长度
sizeof x 求变量X的长度
sizeof x x为数组名,返回数组的长度;(注意:如果x是形参,则此语句返回的是指向int类型的指针的长度);
括号中的表达式总是合法的。所以判断表达式的长度并不需要对表达式进行求值。所以sizeof(a=b+1)并没有向a赋任何值。
++a=10 错误,因为++a是一个值,而不是变量;/*++a其实是复制值*/
前缀和后缀形式的——份变量的拷贝。用于周围表达式的值正是这份拷贝。前缀操作符在进行复制之前增加变量的值,后缀操作符在进行复制之后才进行增加变量的值。
条件操作符与if语句的使用速度相同,但前者更加简洁。
if(a10) b=4+4; b=a>10?8;2
else b=1+1;
int a=20;
if(1<=a<=10)
printf("In range\n");
else
printf("Out of range\n");
/* 执行if语句时,其实是按照逻辑或进行的,所以1<=a<=10为真 */
宏:
定义于stdarg.h头文件中,头文件声明了一个类型va_list和三个宏--va_start,va_arg,va_end.