C语言深度解剖 例题答案(待增添)

1、sizeof(int*p 表示什么意思?

答:sizeof是用于计算指定类型或变量的大小(以字节为单位)。在这个表达式中,sizeof(int)表示int类型的大小,而*p是指针p所指向的对象的值。因此,sizeof(int)*p表示的是将int类型的大小乘以指针p所指向的对象的值。

2、留几个问题(讲解指针与数组时会详细讲解)32 位系统下:

int *p = NULL;

sizeof(p)的值是多少?

sizeof(*p)呢?

答:p是指针,*p是指针所指向的对象,32位系统和64位系统的差别在于long和unsigned long 以及指针变量的差别,32位是:4个字节,4个字节,4个字节(指针变量),64位是:8个字节,8个字节,8个字节(指针变量),所以sizeof(p)的值为4(32位),sizeof(*p)因为指针所指的对象是空指针,*p就是NULL的内容,这个内容是int类型的,所以sizeof(*p)等于sizeof(int)为4。

因为我的是64位系统,所以sizeof(p)为8 ,题目要求是32位系统,所以sizeof(p)为4.

3、int a[100];

sizeof (a) 的值是多少?

sizeof(a[100])呢?//请尤其注意本例。

sizeof(&a)呢?

sizeof(&a[0])呢?

答:sizeof(a) => 400 ;  sizeof(a[100]) => 4 ; sizeof(&a) => 4 ; sizeof(&a[0]) => 4;

因为我的是64位的系统,所以指针变量用sizeof出来的值为8。

 4、留一个问题:在 switch case 语句中能否使用 continue 关键字?为什么?

答:continue关键字 表示终止本次(本轮)循环。当代码执行到 continue 时,本轮循环终止,进入下一轮循环,因此这个关键字适用于循环语句,而switch case语句是分支选择语句,因此不能使用。

5、留一个问题:case 语句后面是否可以是 const 修饰的只读变量呢?请动手测试一下。

答:case语句后面不可以是const修饰的只读变量,case只能接常量或常量表达式,但是switch语句后面可以。

6、 留一个问题:const volatile int i=10;这行代码有没有问题?如果没有,那 i 到底是什么 属性?

答:没有问题,const 和 volatile 并不矛盾,const相当于告诉编译器请把i作为常量使用,而volatile相当于提醒编译器不要做不必要的优化,老老实实从i的内存地址里面把值取出来。

补充知识:被const修饰的对象在所在的作用域无法进行修改操作,编译器对于试图直接修改const对象的表达式会产生编译错误。volatile表示在运行期间对象可能在当前程序上下文的控制流以外被修改(例如多线程中被其他线程修改,对象所在的存储器可能被多个硬件设备随机修改等情况。被volati修饰的对象,编译器不会对这个对象的操作进行优化。一个对象可以同时被const和volatile修饰,表明这个对象体现常量语义,但同时可能被当前对象所在程序上下文意外的情况修改。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值