C语言易错点整理(一)
1、对于字符数组而言,只是将这些字符放进我们所开辟的空间里,不能直接用strlen计算,因为没有"\0",会导致出现随机值,例如一下代码
char arr[] = {'b', 'i', 't'};
printf("%d", strlen(arr));
2、switch语句中,关键字包含case、break、default,但是不包含continue(不执行其下面的语句直接返回判断条件判断)
3、在不同作用域中可以有相同名称的变量,但是在同一作用域中不行;若是在不同作用域中有相同的变量名,则采取就近原则
int num = 10;
int main()
{int num = 1;printf("num = %d\n", num);return 0;
}
4、布尔变量是C99标准引入的,在此之前C语言中没有bool类型
5、printf指定输出格式的时候,%5d是最少打印5位,如果出现了比五位还长的情况,就全部打印
printf("%5d\n", 123456);
6、逗号表达式:以逗号位分割单位一次执行,比如一下就是先对b进行运算,再对c和a的前后置++运算
b = ++c, c++, ++a, a++;
7、switch语句中的case可以不讲究顺序,default语句可以任意位置,并且case后的表达式只能是整型常量表达式,不支持float和double
8、在复合语句中定义的变量只能在复合语句中使用,比如一下情况
for(int i = 0; i < 100; i++)
{printf("%d", i);
}
i = 100;//这里i就是未命名变量
9、变长数组是用整型变量或表达式来定义数组大小,他的大小一定在运行的时候确定,不是在编译的时候,而且一但确定了就不能再改变(注意区分柔性数组)
10、对于一位数组和二位数组而言,在定义的时候,在中括号里填写的是具体的行数/列数,但在使用的时候,是从0开始的数组下标;二维数组可以省略行,将行数交给编译器根据给定的数据个数进行确定,但是不能省略列
11、函数的声明必须放在使用之前,但是定义放在哪里都可以,例如以下代码
//声明
int Add(int x, int y);//使用
int main()
{int c = Add(x, y);return 0;
}//定义
int Add(int x, int y)
{return x + y;
}
12、C语言中指针就是地址,地址就是指针;内存中的每个字节都有地址,通过地址可以找到唯一一个内存单位
13、对于一个表达式,就是我们已经确定了优先级以及结合性,也不一定能确定计算结果,比如以下代码,在vs和Linux gcc测试结果就不同
int ret = (++i)+(++i)+(++i);
14、A中const修饰的是*p表示的是*p不可修改,即p指向的对象不可以被修改;
B中const修饰的也是*p,其意义 和A一样
C中const修饰p本身,表示的是p本身不可以修改但是p指向的对象可以修改
D中第一个const表示p指向的内容不可以被修改,第二个const表示p本身不可以被修改
A const char *pB char const *pC char*const pD const char *const p