扩展 sizeof和strlen malloc

8 篇文章 1 订阅

132位机上根据下面的代码,问哪些说法是正确的?
signed char a = 0xe0;

unsigned int b = a;
unsigned char c = a;

正确答案: C  

A.  a>0 && c>0 为真

B.  a == c 为真

C.  b 的十六进制表示是:0xffffffe0

D.  上面都不对

 

解析:

1.  扩展问题

符号位扩展:有符号数向其它类型数据转化(charint,charunsignedint)

零扩展:无符号数向其它类型转换(unsigned charint,long)

2.   整形提升

在表达式计算时,各种整形首先要提升为int类型,如果int类型不足以表示则要提升为unsigned int类型;然后执行表达式的运算。

所以对于:a == c,二者都会提升为int,然后再比较。

a -> 0xffffffe0.

c -> 0x000000ex.

 

2 linux64c程序,请计算输出的三个sizeof分别是()

void func(char str_arg[100])

{

     cout<<sizeof(str_arg)<<endl;

}

int main(int argc,char* argv[])

{

     char str[]="Hello";

     char *p=str;

     cout<<sizeof(str)<<endl;

     cout<<sizeof(p)<<endl;

     func("test");

     return 0;

}

 

正确答案: D   

A.  558

B.  664

C.  684

D.  688

 

解析:

sizeof(str)测量的是字符数组的占用长度,注意字符串后还有个\0,所以是6
sizeof(p)
测量的是指针的占用长度,64位系统下是8字节
sizeof(str_arg)
测量的是指针长度,因为这里是形参。

 

3 以下代码段有问题的是()

正确答案: A B C

A.  <pre>void func1(char *e){

 char *p1;

 p1=malloc(100);

 sprintf(p1,error:"%s'.",e);

 local_log(p1);

 }

</pre>

B.  <pre>

int func2(char *filename)

 {

   FILE *fp;

   int key;

   fp=fopen(filename,"r");

   fscanf(fp,"%d",&key);

   return key;

  }

</pre>

C.  <pre>

void func3(char *info){

 char *p,*pp;

 p=malloc(100);

 pp=p;

 free(p);

 sprintf(pp,*info:"%s'.",info);

 free(pp);

 }

</pre>

D.  选项全部都不正确

 

解析:

A申请了空间没有释放,

Bfp=fopen();打开流没有关闭,

Cfree了二次,但其实,pp=p;两个指针都指向同一块内存空间。只需释放一次就够了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值