1.【单选题】
int a { 5000 };
int* ptrA { &a };
a++;
*ptrA = ?
A 5000 B 5001 C 5002
解析:ptrA是指向变量a的内存地址,变量a++,解引用ptrA的值也会变化,结果为5001。
2.【单选题】
int a { 5000 };
char logo { 65 };
int* ptrA { &a };
char* ptrlogo { &logo };
int c = sizeof ( int* ) + sizeof ( char* );
假设当前程序的编译架构为x64,
c=??
A 64 B 16 C8
解析:在x64架构下,指针(无论是int*
、char*
还是其他任何类型的指针)的大小通常都是64位(即8字节)。这是因为64位系统使用64位地址空间来寻址内存中的对象。所以选B。
3.【单选题】
int a[] {1001,1002,1003};
int* ptrA { &a[0] };
*ptrA++;
int c = (*ptrA)++;
c=??
A1001 B1002 C1003
解析:这道题首先ptrA指向了1001的地址,然后*ptrA++,指针的加法等于加上数据类型的字节长度乘以数量,此时ptrA又指向的1002的地址。int c = (*ptrA)++,后置递增,c就等于1002,选B。
4.【单选题】
int a { 0x12345678 };
short* b { (short*)&a };
*b = 0xFF;
a = ?
A 0x123456FF B 0xFF345678 C 0x123400FF
解析:这道题int占用4个字节,short占用2个字节,将b用强制类型转换为a的指针,然后对b重新赋值,会改变a的值,此时a的后两个字节将会被覆盖掉,也就是 5678 会被替换为 00FF,答案选C。
5.【单选题】
int a { 0x12344241 };
char* b { (char*)&a };
*b++;
std:.cout << *b;
A A B B C 0x41
解析:char 占用一个字节,将 b 用类型转换指向 a的地址,此时 b 指向的就是 0x41的地址,*b++,地址会向前一位,此时指向0x42的地址,十进制为 66 ,对应ASCII表中B,所以选B。
6.【单选题】
int a[] { 1000,1001,1002 };
int *b{ &a[1] };
int** c { &b };
std::cout << &a [1];
此时屏幕输出了0050000,
*c++;
std::cout<<b;
输出什么?
A 1002 B 0050000 C 0050004 D 未知
解析:b指向了数组a【1】的地址,c是一个二级指针,指向的是b的地址,此时屏幕输出了0050000,说明 b 就等于 0x0050000,*c++ 就等于 c++ ,说明 c 就等于 b的地址 加 4,但是对 b 没有影响 ,此时 b 依然等于 0x0050000,选B。
7.【单选题】
const int a { 1000 };
const int b { 2000 };
const int* c { &a };
以下哪句代码将不能运行?
A c = &b; B *c = 9000; C c = (int*)0;
解析: const int* c { &a }; 说明 c 是一个常量指针, 指针指向可以改,指针指向的值不可以更改,所以选B。
8.【多选题】
int a { 1000 };
int b { 2000 };
int* const c { &a };
以下哪句代码将不能运行?
A c = &b; B *c = 9000; C c = (int*)0;
解析:int* const c { &a }; 说明 c 是一个指针常量,指针指向不可以改,指针指向的值可以更改,所以选 A 和 C。
9.【多选题】
int a { 1000 };
int b { 2000 };
const int* const c { &a };
以下哪句代码将不能运行?
A c = &b; B *c = 9000; C c = (int*)0;
解析:int* const c { &a }; 说明 const 即修饰指针,又修饰常量,所以 A, B 和 C都不能运行。
10.【单选题】
int a[] { 1000,1001,1002 };
int *b{ &a[1] };
int** c { &b };
std::cout << &a [1];
(*c)++;
std::cout<<b;
输出什么?
A 1002 B 0050000 C 0050000 D 未知
解析:这一题与 第七题的区别是 (*c)++ 不同,c 是一个二级指针,指向 指针 b 的地址,因为 *c = b ,此时(*c) ++,可以等效于 b++ , 而 b 是 int 的类型的指针,所以会加 4,之前 b 等于 0050000,加 4 后等于 0050004,所以选C。