C语言小贴士之杂七杂八
sizeof()的返回值类型为size_t,size_t一定是整型,通常来说是unsigned int或者long unsigned int,这与具体的编译器有关。
sizeof()的操作数既可以是类型,也可以是变量。当操作数是类型时,必须加(),当操作数是变量时,()可有可无,建议一律使用(),避免错误。
变量初始化是指在定义变量的同时进行了赋值操作,例如:
switch(var){ case c1: break; case c2: break; default: break;}其中var必须是整型变量,c1和c2必须是整型常量或者整数常量表达式。
另外需要注意的是,无论default放在什么位置,都是只有当其他case无法匹配时,才会执行default,而且当default不在最后时,它的break语句就不能忽略了。所以习惯上都把default放在最后,而且不忽略break语句。
虽然空指针NULL和空字符'\0'在数值上都可以用0表示,但是二者的概念不同,空指针是一个指针,而空字符是char类型的常量。另外使用NULL前需要先包含头文件stdio.h。
字符的字典顺序其实就是字符在ASCII表中的ASCII值顺序。
ANSI C不允许在for循环的控制部分定义变量,C99则允许,但是该变量的作用域仅限于for循环代码块。
如果用register将变量定义为寄存器类型,则无法获得该变量的地址。
当用gcc编译含有math.h头文件的C源文件时,需要增加编译选项-lm,来指示连接器搜索数学库。
对数组初始化时,{}中的数值个数可以小于数组的元素个数,这样没有得到初始值的元素将被默认初始化为0。
对数组赋值只能采用逐个元素赋值的方式,而不能像初始化那样用{}进行整体赋值。
数组名是数组首元素的地址,它是个常量,不可以被修改。
对指针加一个整数等价于对指针的值加上它所指向的对象的字节大小与这个整数的乘积,这同样适用于对指针减一个整数。
只有指向同一个数组的两个指针才能相减,得到的结果是两个指针所指向对象之间相距的元素个数,而不是字节个数。
const int *p;与int * const p;是完全不同的,前者表示指针p所指向的整数对象是常量,后者表示指针p本身是常量。