第一题
int a[10];scanf("%d",a);
A:正确
B:错误
答案及解析 B
我们知道单独的数组名就是首元素地址,但是也有两种情况数组名表示的是整个数组的大小
所以本题arr就是表示的首元素地址,赋值也只能给首元素赋值;
但是如果是下面这样的代码呢?
#include <stdio.h> int main() { int arr[10] = {0}; scanf("%d",&arr); for(int i = 0; i < 10; i++) { printf("%d ", arr[i]); } printf("n"); return 0; }这是C表示的方法,我们这里scanf后面是&arr,是取这个整个数组的地址,那这样我们就可以给整个数组赋值了吗?答案是不可能的,正如我们上面说的,&arr表示 出来也是首元素地址,所以这样的情况依旧是给首元素赋值;
第二题
2. 下面两个结构体,在默认对齐数为 #pragma pack(4)和#pragma pack(8)的情况下,结构体的大小分别是
struct One
{
double d;
char c;
int i;
}
struct Two
{
char c;
double d;
int i;
}
A:16 24,16 24
B:16 20,16 20
C:16 16,16 24
D:16 16,24 24
答案及解析 C
所以本题当默认对齐数为4的时候,double的对齐数就是4了,注意的是要占的字节是自身大小,很多人把对齐数和占的空间大小混淆。记住占的空间大小就是本身字节大小,而对齐数只是对于偏移的地址来说的;
第三题
A:函数
B:过程
C:子程序
D:子例程
答案及解析 A
第四题
#include <stdio.h>
int main()
{
int m=12,n=34;
printf("%d%d", m++, ++n);
printf("%d%dn", n++, ++m);
return 0;
}
A:12353514
B:12353513
C:12343514
D:12343513
答案及解析 A
前置++返回的是++之后的值,后置++返回的是++之前的值,然后m的值加一;
这个在C++primer中曾介绍,后置++的底层,是实现的一个函数,函数中是用一个临时变量拷贝了这个值,然后++原来的,返回拷贝;而前置++就是直接对这个值+=1,再返回这个值
第五题
#include <stdio.h>
int main()
{
char x=040;
printf("%on", x << 1);
}
A:100
B:80
C:64
D:32
答案及解析 A
本题考查的是你认不认识八进制数字,以0开头的为八进制数字,以%o的形式打印的也是八进制,所以本题主要考查对八进制进行移位操作和是否会发生类型的截断;因为char类型只有一个字节,八个比特位;
所以先把040 –>十进制 –> 二进制数字;
八进制 | 十进制 | 二进制 |
0 4 0 | 32 | 1 0 0 0 0 0 |
64 8 1 | 32 16 8 4 2 1 |
所以在这里是没有发生截断的,因为100000只需要6个比特位;而char为8个比特位;
所以正常发生左移一位,右边补0,1000000
换成十进制为64;
转换为八进制就为100
原文地址:https://blog.csdn.net/2302_76941579/article/details/134633075
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_20470.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!