第一题
1. fun(21)结果是()
int fun(int a) { a = (1 << 5) - 1; return a; }
A:10
B:8
C:5
D:31
答案及解析 D
1 << 5,右移操作符,将1的二进制位向右移动5位,右侧补0
0000 0001 右移后 0010 0000 = 32
a = 32 - 1 = 31;
所以结果为31;
第二题
2. sz的结果是多少()
struct Student { int num; char name[7]; short age; char sex; } student1; int sz = sizeof(student1);
A:14
B:15
C:16
D:20
答案及解析 C
内存对齐
第三题
3. 下列语句:int *p, a = 10; p = &a;,均表示地址的是()
A: a p &a
B: &*a &a *p
C: *&p *p &a
D: &a p &*p
答案及解析 D
表示地址的有:p,&a,&*p
第四题
4. 执行如下代码后输出结果为()
#include <stdio.h> int main() { int a[5] = {1, 2, 3, 4, 5}; int *ptr = (int*)(&a + 1); printf("%d, %d", *(a + 1), *(ptr - 1)); return 0; }
A:1,1
B:1,3
C:3,3
D:2,5
答案及解析 D
这个题是第二次出现了吧深入理解:指针变量的解引用 与 加法运算-CSDN博客
我希望大家可以自己动手画画图,在评论区展示出来好不好!
第五题
5. 以下程序运行时,若输入1abcedf2df<回车>输出结果是?
#include <stdio.h> int main() { char a = 0, ch; while ((ch = getchar()) != '\n') { if (a % 2 != 0 && (ch >= 'a' && ch <= 'z')) ch = ch - 'a' + 'A'; a++; putchar(ch); } printf("\n"); return 0; }
A:1abcedf2df
B:1ABCEDF2DF
C:1AbCeDf2dF
D:1abceDF2DF
答案及解析 C
本题考查的是getchar,我们输入的时候是输入了1abcedf2df<回车>,这些输入的都会被存放在缓冲区中,而不是直接输入给输入语句的,本题的输入语句是getchar,这个表示在缓冲区中每次拿一个字符,所以循环条件就是当getchar拿到\n就停止;那if语句就是字符的ASCII式奇数并且还是小写字母的字符,转换为大写;最后putchar输出该字符;
ASCII值表格: