- 在某些书中, main函数的结尾使用的是exit(0)而不是return 0;二者是否一样?
当出现在main函数中时,这两种方式是完全等价的,二者都是种植程序执行,并且向操作系统返回0值。 - 如果main函数最后没有return 会产生什么样的后果?
return语句不是必须的,如果没有return语句,程序一样会终止,在C89中返回给操作系统的值是未定义的,在C99中如果main函数声明的返回类型为int。程序向操作系统返回0,否则返回一个不确定的值。main函数不声明返回值也是正确的。 - C语言编译器不会检测格式串种转换说明的数量是否和输出项数量相匹配。
- 取余运算符%只能用于整数
- 什么情况下 a = a + b 和 a += b不想等?
a[i++] += 2;
a[i++] = a[i++] + 2; - 自增和自减运算符可以用于浮点型,++, – 但是并不常用
- 在C语言在C99中增加布尔类型, 为_Bool
#include <stdio.h>
int main()
{
_Bool b = 2.0;
_Bool c = 1;
printf("%d %d\n", b, c);
}
输出1, 1 非0为真,0为假
- 如果i是int型,而f是float型,那么(i > 0 ? i : f)是哪一种类型?
当int和float混合时,类型为float,当i > 0时,类型为i的float类型。 - 为什么C99中定义的布尔类型是_Bool呢?
因为C89标准支出下划线跟上一个大写字母开头的名字是保留字,程序员不应该使用 - sizeof当求类型的大小时,需要跟上括号。int a = 1; sizeof a;是合法的。sizeof(int)合法,sizeof int 非法
- 通常编译器可以确定sizeof表达式的值,即在编译期间可以求出对应表达式的值,但是并不是绝对的。
在C89标准中总是可以得,但是在C99标准中,编译器不能确定变长数组的大小,因为数组中的元素在程序执行期间是可变的。int a = 4; int b[a]; - 在C99标准中可以使用指定初始化的功能 int a[12] = {[2] = 1, [4] = 2};
int a[] = {[5] = 1, [44] = 2, [33] = 0}; 数组的长度为45 - 指定初始化可能对同一个数组元素进行多次初始化操作,例如
int a[] = {4, 9, 1, 8, [0] = 5, 7};
数组长度为4, 内容为5, 7, 1, 8 - 指针总是和地址一样的吗?通常时但不总是,具体不研究。
- 利用=运算符吧字符串复制到数组中是不可能的。
- 如果让printf函数输出字符串str, 是否可以这样 printf(str);? 可以但是很危险,如果str中包含%,那么将不会获得预期结果。
- gcc -E 编译器产生预处理的输出
- 由于结构体对齐,结构会出现空洞,但是结构的开始处不可能出现空洞,只能在成员之间或者最后一个成员口面会出现空洞,因此可以保证指向结构第一个成员的指针就是整个结构的指针,
- 一般在枚举的最后一个常量后面是不需要逗号的,但是跟上逗号也合法。
C Programming Chapter1
最新推荐文章于 2024-07-25 14:57:29 发布