C++指针的考试内容
指针的基本概念
指针是一种特殊的变量,用于存储数据的内存地址。
指针变量中存储的是内存地址,定义指针变量时必须指定其指向的类型。
指针的类型
指针可以指向任意类型的数据,包括基本数据类型(如int、char、float等)和自定义复杂类型(如结构体)。
不同类型的数据占用的内存大小不同,指针类型的作用之一是保证指针在解引用时能获取正确大小内存的数据。
指针的运算
指针可以进行加减运算,指针加1或减1时,会根据其指向的数据类型所占的字节数来移动。
例如,int* p;,p++后,p的地址会增加sizeof(int)字节。
常量指针与指针常量
常量指针:指向常量的指针,其指向的值不能通过指针修改,但指针本身可以指向其他地址。语法为const 变量类型* 变量名或变量类型 const* 变量名。
指针常量:指针的常量,其指向的地址不能改变,但可以通过解引用修改指向的值。语法为变量类型* const 变量名。
指针与数组
数组名是数组中第一个元素的存储地址,可以作为指针使用。
例如,int arr[10];,arr等价于&arr[0]。
函数指针和指针函数
函数指针:指向函数的指针,可以用来调用函数。
指针函数:返回值为指针的函数。
多级指针
多级指针是指指针的指针,例如int** p;表示p是一个指向int类型的指针。
2023年12月GESP C++四级真题中涉及指针的考点题目及答案解析
单选题
题目:下列代码执行后,输出的是( )。
cpp复制
int arr[10] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
int p = arr;
p++;
cout << p;
选项:
A) 4
B) 6
C) 8
D) 10
答案:B
解析:数组名是数组第一个元素的地址,定义int类型指针p,赋值为arr,即p指向arr[0];p++,指针自增1,则p的指向往后移动一个int类型的存储空间,指向arr[1],p指针解引用,输出p即输出p所指向的值,arr[1]的值为4,所以输出4。
单选题
题目:下列代码执行后,输出的是( )。
cpp复制
int x = 20;
int p = &x;
cout << f(p);
选项:
A) 400
B) 20
C) 40
D) 800
答案:A
解析:定义函数f的功能:返回指针p指向数据的平方。主函数中定义int类型变量x初始化为20,int类型指针初始化为变量x的地址,将指针p作为实参进行函数调用,函数结果为20的平方400,赋值给p,输出p,所以输出400。
2024年3月GESP C++四级真题中涉及指针的考点题目及答案解析
单选题
题目:下列C++代码执行后,输出的是( )。
cpp复制
float fnum[2] = {1.1, 1.1};
int foo(float* f) {
return int(f * 2);
}
cout << fnum[0] + foo(fnum + 1);
选项:
A) 3.1
B) 3.2
C) 3.3
D) 3.4
答案:A
解析:foo函数的功能是传入一个float指针f,返回值为f指针指向的内容乘2的整数部分。数组fnum也是指针地址,指向数组第一个元素,fnum[1] = int(2 * 1.1) = 2,fnum[0] + fnum[1] = 1.1 + 2 = 3.1,所以输出3.1。
2023年6月GESP C++四级真题中涉及指针的考点题目及答案解析
单选题
题目:下列关于C++语言中指针的叙述,不正确的是( )。
选项:
A) 指针变量中存储的是内存地址。
B) 定义指针变量时必须指定其指向的类型。
C) 指针变量只能指向基本类型变量,不能指向指针变量。
D) 指针变量指向的内存地址不一定能够合法访问。
答案:C
解析:指针变量不仅可以指向基本类型变量,还可以指向指针变量,例如int** p;表示p是一个指向int类型的指针。
模拟选择题
单选题
题目:下列代码执行后,输出的是( )。
cpp复制
int arr[5] = {1, 2, 3, 4, 5};
int* p = arr;
cout << (p + 3);
选项:
A) 1
B) 2
C) 3
D) 4
答案:D
解析:指针p指向数组arr的第一个元素,p + 3指向数组的第四个元素,(p + 3)解引用后输出4。
单选题
题目:下列代码执行后,输出的是( )。
cpp复制
int x = 10;
int* p = &x;
p = 20;
cout << x;
选项:
A) 10
B) 20
C) 30
D) 40
答案:B
解析:指针p指向变量x的地址,通过解引用p修改x的值为20,输出x的值为20。
单选题
题目:下列代码执行后,输出的是( )。
cpp复制
int arr[3][2] = {{1, 2}, {3, 4}, {5, 6}};
int (p)[2] = arr;
cout << ((p + 1) + 1);
选项:
A) 2
B) 4
C) 6
D) 8
答案:B
解析:p是一个指向二维数组的指针,p + 1指向第二行,(p + 1)解引用后得到第二行的首地址,((p + 1) + 1)解引用后得到第二行第二个元素的值4。
单选题
题目:下列代码执行后,输出的是( )。
cpp复制
char* str = "Hello, World!";
cout << (str + 7);
选项:
A) H
B) e
C) W
D) o
答案:C
解析:str是一个指向字符串的指针,str + 7指向字符串的第8个字符(从0开始计数),(str + 7)解引用后输出W。
单选题
题目:下列代码执行后,输出的是( )。
cpp复制
int a = 10;
int b = 20;
int* p1 = &a;
int* p2 = &b;
*p1 = p2;
cout << a << " " << b;
选项:
A) 10 20
B) 20 20
C) 10 10
D) 20 10
答案:B
解析:指针p1指向变量a的地址,指针p2指向变量b的地址。通过解引用p1 = *p2,将b的值赋给a,所以a的值变为20,b的值仍为20,输出20 20。
希望这些内容对你有帮助!如果有任何其他问题或需要进一步的解释,请随时告诉我。