C 语言中忽略的一些事情(一)

  1. 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的位置对程序的运行没有影响。

  1. 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);
  1. 什么是声明,什么是定义
    记住:在C语言中对象有且只有一个定义这里的对象并不是C++中的类对象,这类的对象只是和链接器相关的,比如函数和变量。

声明:说明了在其他地方创建了对象的名字,它允许你使用这个名字,可以多次出现;甚至可以出现在不同的文件中,需要使用关键字extern.
定义:是一种特殊的声明,它创建了对象,只出现在一个地方

你可能感兴趣的:(C语言)