1.【单选题】
int a[4] { 1001,1002,1003,1004 };
int* p{ &a[1] };
p[1] = ?
A 1001 B 1002 C 1003
解析:这道题考察了指针和数组可以混用。p 指向了 数组 a[0] 的地址,也就是 1002 的地址,此时 *p = p[0],p[0] 等于 1002 ,p[1] 就等于 1003,选C。
2.【单选题】
int a = 5;
int b = 6;
int& la = a;
la = b;
la++;
b = ?
A 5 B 6 C 7
解析:这道题 la 是 a 的引用。la = b,是将 a 赋值于 b ,等效于 a = b ,la ++ 对 b 的值没有影响,此时 b 依然等于 6,选B。
3.【单选题】
int* a = (int*) malloc( 4 * sizeof ( int ) );
a[1] = 9;
*a = ?
A 不确定 B 0 C 9
解析:a 分配了 4 个 int 类型的空间,a[1] = 9 , *a 就等于 a[0] 的值,此时并不确定a[0]等于多少,所以选A。
4.【单选题】
int* a = ( int* )malloc( 4 * sizeof( int ) );
a[0] = -1;
char* b = ( char* ) &a[0];
b++;
memset(b, 0, 3);
a[0] = ?
A -1 B 0 C 255
解析:这道题需要用图片解释,其中 a [0] = -1 ,也就是 0xFFFFFFFF。如图所示:
b++后,如图所示:
memset(b, 0, 3) 后,如图所示:
又因为内存排序方式为从低位到高位,所以 a[0] 等于 0x000000FF 等于255,所以选C。
5.【单选题】
int* a = ( int* )malloc( 4 * sizeof( int ) );
memset( a, 65535 , 4 );
a[0] = ?
A -1 B 65535 C 255
解析:65535 等于 2的16次方 - 1,也就是 0xFFFF。memset( a, 65535 , 4 ),在 a 的前 4 个字节 赋值 0xFFFF ,但是 每个字节只能赋值0xFF ,所以 a[0]等于 0xFFFFFFFF,也就是 - 1。
6.【单选题】
int a* = calloc(1, 4);
a = realloc( a,100 );
A a的内存地址可能发生变化
B a的内存地址一定发生变化
C a的内存地址一定不发生变化
解析:这道题选A。a重新分配内存空间后,内存地址可能发生变化。
7.【单选题】
int a[] { 1001,1002,1003,1004 };
int *b = new int [4];
memcpy( b, &a[2] , 10);
b[1] = ?
A 1004 B 1002 C 1003
解析:memcpy 拷贝 a 的地址,从 1003 的地址开始拷贝 ,拷贝 10 个字节,此时b[0] = 1003 ,b[1] = 1004,选A。
8.【单选题】
int a [2][2]
{
{ 1, 2 },
{ 3, 4 }
}
int* b = (int*) a;
b[3] = ?
A 2 B 3 C 4
解析:a的地址赋值给了b,此时 b[0] = 1, b[1] = 2, b[2] = 3, b[3] = 4,选C。
9.【单选题】
下面说法正确的是:
int a = 5;
int& la = a;
int* b = &la;
A b中存放的是la的内存地址
B b中存放的是a的内存地址,因此la本身并不占用内存
C b中存放的是a的内存地址
解析:这道题答案选C。la是a的引用,引用是阉割版的指针,它占用内存空间。
10.【单选题】
下面说法正确的是:
int *a = new int;
A 释放a的内存可以使用 delete
B 释放a的内存应该使用delete
C 释放a的内存应该使用free(a);
解析:选项A:正确,new 对应delete,选项B:错误,如果a是个数组可以选,选项C:可以用,但是不推荐使用。