- switch …case 语句
C语言中分支语句中常用的switch…case语句,常见的格式有:
switch(flag){
case 常量1:
printf("常量1");
break;
case 常量2:
printf("常量2");
break;
...
default:
printf("default");
break;
}
大家都知道,当前case标签中没有找到对应的常量时,就会自动选择default运行,那么default的位置对程序运行有关系呢?如果我把default语句放到switch中的第一个优惠如何呢?修改一下代码:
switch(flag){
default:
printf("default");
break;
case 常量1:
printf("常量1");
break;
case 常量2:
printf("常量2");
break;
...
}
这样修改后,会不会直接运行default中的代码呢?
经过编程测试发现,并不是这样的,而是和之前运行一样的,所以case和default的位置对程序的运行没有影响。
- sizeof关键字
sizeof在C语言中是一个操作符而不是一个函数,它经常被程序员认为是一个函数而非一个操作符。
char* p = new char[32];
int cnt = sizeof * p;
上面的代码有问题吗?
没有问题,那运行结果是多少?32?1?或者其他数字?
答案是1;
如果我们加上括号呢?哪答案又是多少呢?
char* p = new char[32];
int cnt = sizeof (* p);
答案还是1。
因为sizeof操作符返回的是p指向对象的类型的字节数,和对象的多少没有关系。因为上面的例子中p指向的一个char类型的内存,而char类型就是只占一个字节,所以返回就是1,和分配多少个char类型的内存没有关系。
修改一下代码:
int* p = new int[32];
int cnt = sizeof (* p);
那么cnt的结果就是4了,因为一个int在内存中占四个字节。
什么时候加括号呢?当sizeof的操作数是个类型名,两边必须加上括号(因为这个原因,有人就误以为这个一个函数),但操作数是变量则不必加括号
int cnt = sizeof (int);
- 什么是声明,什么是定义
记住:在C语言中对象有且只有一个定义这里的对象并不是C++中的类对象,这类的对象只是和链接器相关的,比如函数和变量。
声明:说明了在其他地方创建了对象的名字,它允许你使用这个名字,可以多次出现;甚至可以出现在不同的文件中,需要使用关键字extern.
定义:是一种特殊的声明,它创建了对象,只出现在一个地方