指针相关博客
第一题
1. 存在int类型变量x,y,z,其对应值为x=0x59,y=0x39,z=0x6E,则x * y + z的值为()
A:1 0010 0111 0011
B:1 0100 0011 1111
C:1 0010 0111 0111
D:1 0110 0111 1111
答案及解析 B
本题考查进制之间的转换
x = 0x59 = 5*16 + 9*1 = 89;
y = 0x39 = 3*16 + 9*1 = 57;
z = 0x6E = 6*16 + 14*1 = 110;
x * y + z = 89*57 + 110 = 5183
二进制为:1 0100 0011 1111
第二题
2. 在64位机器上用gcc编译以上代码,求sizeof(struct A),sizeof(struct B)分别是多少()
struct A { int a; short b; int c; char d; }; struct B { short b; int c; char d; };
A:12 16
B:12 12
C:16 24
D:16 12
答案及解析 D
本题考查内存对齐规则,直接上博客,看完就懂
第三题
3. 如下函数的f(1)的值为()
int f(int n) { static int i = 1; if(n >= 5) return n; n = n + i; i++; return f(n); }
A:5
B:6
C:7
D:8
答案及解析 C
本题考查的是函数递归和static变量
首先局部static变量,只会初始化一次,存放在静态区;
所以i的值是一直增加的;
第四题
4. 32位系统下,对于下面的结构体A和B,sizeof(A), sizeof(B)的结果分别是()
#include <stdio.h> #pragma pack(2) struct A { int a; char b; short c; }; #pragma pack() #pragma pack(4) struct B { char b; int a; short c; }; #pragma pack() int main() { printf(“%d %d\n”,sizeof(struct A),sizeof(struct B)); return 0; }
A:8,8
B:8,10
C:8,12
D:7,8
答案及解析 C
这里涉及的是设置默认对齐数,设置的默认对齐数依旧是要和我们变量的自身对齐数做比较的,之后变量占的字节空间是自身的大小
第五题
5. 以下能对二维数组a进行正确初始化的语句是( )
A:int a[2][ ]=({1,0,1},{5,2,3});
B:int a[ ][3]={{1,2,3},{4,5,6}};
C:int a[2][4]=({1,2,3},{4,5},{6});
D:int a[ ][3]={(1,0,1)(),(1,1)};
答案及解析 B
本题考查的是对二维数组的初始化
记住下面几点:
1. 必须显示地写出列,可以省略行,不可以省略列;
2. 不可以用空括号,可以用空大括号。
3. 千万别定义越界
4. 没有初始化到的默认为0
A:错误,省略了列;
B:正确,表示的是两行三列的二维数组;
C:错误,明确指出是两行,后面越界了
D:错误,这里注意是小括号,就是逗号表达式;int a[][3] = {1,(),1};但是不可以是空括号!