1. ********************************************************************************************************************************************************************************
int func(int a)
{
int b;
switch(a)
{
case 1: b=30;
case 2: b=20;
case 3: b=16;
default: b=0;
}
return b;
}
则func(1)=?
答:func(1)=0,因为没有break语句,switch中会一直计算到b=0。这是提醒我们不要忘了break。呵呵。
2***************************************************************************************************************************************************************************************
我们再看如下的例子return 返回什么东西呢?
char *Func(viod)
{
char str[30];
...
return str;
}
这个程序是有错误的,str属于是局部变量,位于栈内存中,在Func结束的时候被释放,所以返回str会导致错误。return 不能返回指向栈内存的指针,应为这个内存地址空间在函数结束时内存地址会被释放掉。
3***************************************************************************************************************************************************************************************
typedef
struct _PM1a_CNT_BLK
{
UINT32 SciEn :1; 位域结构体 真个结构体占用UINT32大小
UINT32 BmRld :1;
UINT32 GblRls :1;
UINT32 Reserved1 :7;
UINT32 SlpTyp :3;
UINT32 SlpEn :1;
UINT32 Reserved2 :18;
}PM1a_CNT_BLK;
PM1a_CNT_BLK Pm1aCntReg;
*((UINT32*)&Pm1aCntReg) = 0;
*((UINT32*)&SmiEnReg) = 0;
*((UINT16*)&Pm1aEvtReg) = 0;
这是UEFI 代码中的一个小片段,对这里的理解是:首先定义了一个 _PM1a_CNT_BLK 类型的结构体变量Pm1aCntReg,然后对这个结构体变量取地址,再强制转换为UINT32 类型的指针变量(地址就是指针,所以这里要加“*”号。例如 你要定义一个指针也需要UINT32 * a ),然后再取地址里面的值,这里是为了方便的为这个结构体赋值
C语言题目归类分析
最新推荐文章于 2021-11-26 14:48:24 发布