第一题
int a[10];
答案及解析 A
A:取到的是a[0]的地址,我们对地址的加整数,加的是这个指针指向的内容类型的字节数;
比如&a[0]+1,a[0]为int类型,那&a[0]+1,就是往后走4个字节,也就是达到下一个元素的位置;如果是(char*)&a[0] + 1;就是往后走一个字节,这样说有点抽象,用图表示为:
我们要把数字换成二进制表示出来才更直观:
B:a代表的是首元素地址,sizeof(int)为4个字节,也就是要让a从首元素的地址往后移动4*4个字节,就到a[16]的地址,明显的越界;
C:&a是取到整个数组的地址,类型为int (*)[],但是表示出来依旧首元素地址,强转为int*类型,+1,就是往后走4个字节,到arr[1]的地址;
D:(char*)&a,把a强转为char*类型,sizeof(int)为4,往后移动4字节位置,到达的是arr[1]的地址,想要取到整个整型的地址,要再强转回int*;
第二题
int sum = 0;
for (int i=1;i<=5;sum++)
sum+=i;
A:无限
B:0
C:1
答案及解析 A
因为for循环里是sum的增加,并不是i,而判断语句中是i <= 5;所以i无变化,一直满足这个循环条件,是死循环,所以选A
第三题
A:包含2个字符
B:说明不合法
C:包含1个字符
D:包含3个字符
答案及解析 C
ddd(可以是1~3个d)表示的是一个字符,为八进制数字;
第四题
4. 已有定义:char a[]=”xyz”,b[]={‘x’,’y’,’z’};,以下叙述中正确的是 ()
(长度使用sizeof比较)
A:数组a和b的长度相同
D:上述说法都不对
答案及解析 C
a这个字符串,有隐藏的,所以计算的是4个字符的大小,sizeof(a) = 4;
而sizeof(b) = 3;
若想查看sizeof和strlen的区别,点击此博客:全网最详细的sizeof运算和strlen函数讲解(通过多种数据类型举例)_如何用sizeof算出数据字节数_小程序面包园的博客-CSDN博客
第五题
5. 若有以下说明和定义语句:考虑内存对齐,则变量aa所占内存的字节数是( )
union uti
{
int n;
double g;
char ch[9];
};
struct srt
{
float xy;
union uti uv;
} aa;
A:9
B:8
C:24
D:13
答案及解析 C
union的最大对齐数为8,然而联合体的大小至少为最大成员的大小,所以为9个字节,但是大小都要是最大对齐数的整数倍,所以联合体最后的字节数为16,最大对齐数为8;
在结构体中嵌套联合体,结构体等,这样的自定义类型的对齐数就是自己内部的最大对齐数,所以为8,但是要占自身字节的大小;之后最后的字节数必须是最大对齐数的整数倍;
原文地址:https://blog.csdn.net/2302_76941579/article/details/134655076
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_1391.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!