内容正文:
编写说明:2027版吉林省高职分类(对口招生)考试电子与信息类《考纲百套卷》,依据《吉林省高职分类(对口招生)考试电子与信息类专业综合卷考试科目及纲要(2025版)》编写。本专辑涵盖三个部分,第一部分为知识训练卷,第二部分为专题训练卷,第三部分为课程综合卷。本专辑共115份试卷,其中知识训练卷82份、专题训练卷19份、课程综合卷14份。
本试卷是第14卷,为知识训练卷,按《C语言程序设计》中“指针”范围和要求编写。具体内容为:1.了解指针的概念。2.了解指针变量的定义与使用。
吉林省高职分类(对口招生)考试
电子与信息类《考纲百套卷》
第14卷 C语言程序设计——指针
(考试时间:45分钟 满分:100分)
一、单项选择题(共20题,每题2分,共40分。)
1.指针变量中存储的是( )
A.另一个变量的内存地址
B.另一个变量的值
C.一个常量值
D.函数的执行结果
【答案】A
【解析】指针变量是用来存放地址的变量。例如int *p;中p存储的是一个int型变量的地址。
2.若有int a=5; 则&a的含义是( )
A.a的值
B.变量a的内存地址
C.a的平方
D.a的补码
【答案】B
【解析】&是取地址运算符,&a获取变量a在内存中的起始地址。与scanf中&a用法一致。
3.设有int a=10,*p=&a; 则*p的值是( )
A.变量a的地址
B.指针p的地址
C.变量a的值,即10
D.不确定
【答案】C
【解析】*是指针间接访问运算符,*p表示访问p所指向的变量的内容。p=&a即指向a,故*p就是a的值10。
4.定义指向int型变量的指针p的正确语句是( )
A.int p;
B.pointer int p;
C.int *p*;
D.int *p;
【答案】D
【解析】指针定义格式:类型 *指针变量名; 。int *p;表示p是一个指向int类型的指针变量。
5.若有int a[5], *p=a; 则p指向( )
A.数组a的首元素a[0]
B.数组a的最后一个元素
C.整个数组a
D.数组名a的地址
【答案】A
【解析】数组名a代表首元素地址,p=a使p指向a[0]。等价于p=&a[0]。此后可用*(p+i)访问a[i]。
6.NULL指针的含义是( )
A.指向0号内存单元
B.空指针,不指向任何有效地址
C.指向第一个变量
D.指针的默认值
【答案】B
【解析】NULL是一个宏(通常为0),表示指针未指向任何有效内存。使用前应检查指针是否为NULL。
7.若int *p指向数组a的首元素,p+1指向( )
A.p的地址加1个字节
B.数组a的最后一个元素
C.数组a的第2个元素a[1]
D.p的值加1
【答案】C
【解析】指针+1不是加1字节,而是跳过1个元素的大小。int型占4字节,p+1跳过4字节指向a[1]。
8.要用函数交换两个整型变量的值,参数应使用( )
A.普通整型参数
B.常量参数
C.数组参数
D.指针参数(传地址)
【答案】D
【解析】值传递无法修改实参。必须传递变量的地址(指针),函数内通过*指针修改变量的值来实现交换。
9.char *s="Hello"; 中,s指向( )
A.字符串常量"Hello"的首字符'H'
B.整个字符串"Hello"
C.字符'H'的值
D.未分配内存
【答案】A
【解析】s是指向字符的指针,指向字符串常量的首字符'H'。注意:字符串常量不可通过s修改。
10.若有int a[3]={1,2,3},*p=a; 则*p++先执行( )
A.指针p自增
B.间接访问*p(取a[0])
C.p指向的元素值自增
D.语法错误
【答案】B
【解析】*p++等价于*(p++),因++后置,先取*p的值,再p++。先取a[0]=1,然后p指向a[1]。
11.设有int a[5],*p=a; 则以下与a[2]不等价的是( )
A.*(a+2)
B.*(p+2)
C.*p+2
D.p[2]
【答案】C
【解析】*p+2 = a[0]+2,不是a[2]。*(a+2)、*(p+2)、p[2]均等价于a[2]。注意运算符优先级。
12.未初始化或已释放的指针称为( )
A.空指针
B.静态指针
C.常量指针
D.野指针(悬空指针)
【答案】D
【解析】野指针指向不确定的内存区域,使用会导致不可预知的错误。定义时应初始化为NULL或有效地址。
13.void f(int *p) {*p=100;} 调用f(&x);后,x的值为( )
A.100
B.x的原值
C.不确定
D.编译错误
【答案】A
【解析】f(&x)传递x的地址,函数内*p=100即修改x为100。指针参数实现函数对外部变量的修改。
14.int **p; 定义的是( )
A.指向int的指针
B.指向指针的指针(二级指针)
C.int类型的数组
D.两个指针变量
【答案】B
【解析】int **p表示p是一个指针,它指向另一个int*类型的指针。每个*代表一级间接访问。
15.int a[5],*p1=&a[0],*p2=&a[3]; p2-p1的值是( )
A.12
B.4
C.3
D.1
【答案】C
【解析】同类型指针相减得到它们之间元素的个数,而非字节差。&a[3]-&a[0]=3个元素。
16.在32位系统中,一个指针变量占用的字节数是( )
A.1
B.2
C.8
D.4
【答案】D
【解析】32位系统地址总线为32位,指针存储地址需4字节。64位系统指针占8字节。
17.用指针p遍历数组a[n]的正确循环条件是( )
A.for(p=a;p<a+n;p++)
B.for(p=a;p<a+n;a++)
C.for(p=0;p<n;p++)
D.while(*p!=0)
【答案】A
【解析】p<a+n即p未超出数组末尾地址。p++每次移动一个元素大小。a++非法(数组名是常量)。
18.const int *p; 的含义是( )
A.指针p本身不可修改
B.不能通过p修改它所指向变量的值
C.p指向的值和p本身都不可修改
D.p是常量指针
【答案】B
【解析】const在*之前,限定*p只读。即p可指向别处,但不能通过*p修改指向的内容。int * const p则相反。
19.char s[]="ABC",*p=s; printf("%c",*(p+2));输出( )
A.A
B.B
C.C
D.空字符
【答案】C
【解析】p指向s[0]='A',p+2指向s[2]='C',*(p+2)取出'C'。指针偏移访问字符串中任意字符。
20.int *p[5]; 定义的是( )
A.指向5个int的指针
B.指向int[5]数组的指针
C.一个int型指针
D.包含5个int*型指针的数组
【答案】D
【解析】[]优先级高于*,p先与[5]结合成数组,元素类型为int*。即p是一个有5个int指针元素的数组。
二、判断题(共10题,每题1分,共10分。)
1.指针变量本身也占用内存空间,有自己的地址。( )
【答案】√
【解析】指针也是一种变量,在内存中有自己的存储位置和地址。可以用&p获取指针变量p自身的地址。
2.int *p; 定义后,*p的初始值自动为0。( )
【答案】×
【解析】未初始化的指针是野指针,*p的值不确定。应初始化为int *p=NULL;或int *p=&某变量;。
3.数组名可以像指针变量一样进行自增(++)操作。( )
【答案】×
【解析】数组名是地址常量,不是变量,不能做a++或a--操作。但可以定义指针p=a;然后p++来遍历。
4.通过指针可以间接访问和修改它所指向的变量的值。( )
【答案】√
【解析】*p可读取或写入p指向的变量值,是间接访问的基本方式。如*p=10即将10写入指向的变量。
5.不同类型指针之间可以直接相互赋值,无需类型转换。( )
【答案】×
【解析】不同类型的指针赋值会产生编译警告,应显式类型转换。如int*不能直接赋给float*。
6.通过指向字符串常量的指针可以安全地修改字符串中的任意字符。( )
【答案】×
【解析】char *s="Hello"中"Hello"在只读区,通过s修改如s[0]='h'会导致运行时错误(段错误)。
7.int a[5]; 则a和&a[0]的值完全相同。( )
【答案】√
【解析】数组名a的值就是首元素a[0]的地址。a == &a[0]恒成立。两者的值和类型都相同。
8.函数可以返回一个局部变量的地址给调用者安全使用。( )
【答案】×
【解析】局部变量在函数返回后被释放,其地址变为无效(悬空指针),使用该地址会导致未定义行为。
9.二级指针int **p可以通过两次间接访问**p获取最终int值。( )
【答案】√
【解析】**p:先*p获取一级指针,再*(取内容)获取int值。多级指针通过多次*访问最终数据。
10.同类型的两个指针可以进行比较运算(如<、>、==)。( )
【答案】√
【解析】同类型指针可进行关系比较,常用于判断两个指针是否指向同一数组的相对位置。
三、填空题(共5题,每题2分,共10分。)
1.在32位系统中,一个指针变量通常占用____个字节的存储空间。
【答案】4
【解析】32位系统地址线32位,指针存储地址需4字节(32bit)。64位系统指针占8字节。
2.不指向任何有效地址的指针称为空指针,其宏名是____。
【答案】NULL
【解析】NULL在stdio.h中定义为(void*)0,表示指针悬空。使用指针前应检查是否为NULL。
3.指针执行p++操作时,实际移动的字节数等于指针____类型所占的字节数。
【答案】基
【解析】int*的p++移动sizeof(int)=4字节,char*移动1字节。移动量取决于指针的基类型。
4.void *类型的指针称为____指针,它可以指向任意类型的数据,但使用前需强制类型转换。
【答案】通用
【解析】void*是通用指针类型,可存储任意类型地址,但不能直接解引用,需先转为具体类型指针。
5.若int a=10,*p=&a; 则表达式&p取得的是指针变量____自身的地址。
【答案】p
【解析】p是指针变量,存储a的地址;&p是p自身在内存中的地址。p和&p含义完全不同。
四、读程序写结果题(共4题,每题5分,共20分。)
1.请阅读下列程序,写出运行结果。
#include <stdio.h>
int main()
{
int a = 5, *p = &a, **q = &p;
**q = **q + 3;
printf("%d", a);
return 0;
}
【答案】8
【解析】**q即*q即*p即a。**q=5+3=8,即a被改为8。考查二级指针的间接访问追踪。
2.请阅读下列程序,写出运行结果。
#include <stdio.h>
int main()
{
char *s[] = {"AB", "CD", "EF"};
printf("%c", s[1][0]);
return 0;
}
【答案】C
【解析】s是指针数组,s[1]指向"CD",s[1][0]='C'。考查指针数组的访问方式。
3.请阅读下列程序,写出运行结果。
#include <stdio.h>
int main()
{
int a[] = {2, 4, 6, 8};
int *p = a + 1;
printf("%d", *(p + 2));
return 0;
}
【答案】8
【解析】p=a+1指向a[1]=4,p+2指向a[3]=8,*(p+2)=8。考查指针偏移计算与元素定位。
4.请阅读下列程序,写出运行结果。
#include <stdio.h>
int main()
{
int x = 10, y = 20;
int *p = &x;
p = &y;
*p = 30;
printf("%d,%d", x, y);
return 0;
}
【答案】10,30
【解析】p先指向x,后改指向y。*p=30修改y=30,x保持10不变。考查指针重新赋值后的指向变化。
五、编程题(共2题,每题10分,共20分。)
1.编写一个函数getMax(int *a, int n, int **maxPtr),找出数组中最大值,并通过maxPtr返回指向最大值元素的指针。在main中调用并通过指针输出最大值。
【答案】
#include <stdio.h>
void getMax(int *a, int n, int **maxPtr)
{
int i;
*maxPtr = a;
for (i = 1; i < n; i++)
if (a[i] > **maxPtr)
*maxPtr = &a[i];
}
int main()
{
int arr[5] = {12, 35, 8, 27, 19};
int *pMax;
getMax(arr, 5, &pMax);
printf("最大值=%d
", *pMax);
return 0;
}
【解析】getMax通过二级指针maxPtr返回最大值元素的地址。&pMax传入指针的地址,函数内修改*maxPtr指向最大值位置。考查二级指针的实际应用。
2.编写一个函数countVowel(char *s),用指针方式统计字符串中元音字母(a/e/i/o/u大小写)的个数并返回。在main中调用。
【答案】
#include <stdio.h>
int countVowel(char *s)
{
int count = 0;
while (*s != '\0')
{
if (*s == 'a' || *s == 'e' || *s == 'i' || *s == 'o' || *s == 'u')
count++;
if (*s == 'A' || *s == 'E' || *s == 'I' || *s == 'O' || *s == 'U')
count++;
s++;
}
return count;
}
int main()
{
char *str = "Hello World";
printf("元音字母个数=%d
", countVowel(str));
return 0;
}
【解析】指针s遍历字符串,检查每个字符是否为元音(大小写)。"Hello World"中e/o/o共3个元音。考查指针遍历字符串的实际应用。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:2027版吉林省高职分类(对口招生)考试电子与信息类《考纲百套卷》,依据《吉林省高职分类(对口招生)考试电子与信息类专业综合卷考试科目及纲要(2025版)》编写。本专辑涵盖三个部分,第一部分为知识训练卷,第二部分为专题训练卷,第三部分为课程综合卷。本专辑共115份试卷,其中知识训练卷82份、专题训练卷19份、课程综合卷14份。
本试卷是第14卷,为知识训练卷,按《C语言程序设计》中“指针”范围和要求编写。具体内容为:1.了解指针的概念。2.了解指针变量的定义与使用。
吉林省高职分类(对口招生)考试
电子与信息类《考纲百套卷》
第14卷 C语言程序设计——指针
(考试时间:45分钟 满分:100分)
一、单项选择题(共20题,每题2分,共40分。)
1.指针变量中存储的是( )
A.另一个变量的内存地址
B.另一个变量的值
C.一个常量值
D.函数的执行结果
2.若有int a=5; 则&a的含义是( )
A.a的值
B.变量a的内存地址
C.a的平方
D.a的补码
3.设有int a=10,*p=&a; 则*p的值是( )
A.变量a的地址
B.指针p的地址
C.变量a的值,即10
D.不确定
4.定义指向int型变量的指针p的正确语句是( )
A.int p;
B.pointer int p;
C.int *p*;
D.int *p;
5.若有int a[5], *p=a; 则p指向( )
A.数组a的首元素a[0]
B.数组a的最后一个元素
C.整个数组a
D.数组名a的地址
6.NULL指针的含义是( )
A.指向0号内存单元
B.空指针,不指向任何有效地址
C.指向第一个变量
D.指针的默认值
7.若int *p指向数组a的首元素,p+1指向( )
A.p的地址加1个字节
B.数组a的最后一个元素
C.数组a的第2个元素a[1]
D.p的值加1
8.要用函数交换两个整型变量的值,参数应使用( )
A.普通整型参数
B.常量参数
C.数组参数
D.指针参数(传地址)
9.char *s="Hello"; 中,s指向( )
A.字符串常量"Hello"的首字符'H'
B.整个字符串"Hello"
C.字符'H'的值
D.未分配内存
10.若有int a[3]={1,2,3},*p=a; 则*p++先执行( )
A.指针p自增
B.间接访问*p(取a[0])
C.p指向的元素值自增
D.语法错误
11.设有int a[5],*p=a; 则以下与a[2]不等价的是( )
A.*(a+2)
B.*(p+2)
C.*p+2
D.p[2]
12.未初始化或已释放的指针称为( )
A.空指针
B.静态指针
C.常量指针
D.野指针(悬空指针)
13.void f(int *p) {*p=100;} 调用f(&x);后,x的值为( )
A.100
B.x的原值
C.不确定
D.编译错误
14.int **p; 定义的是( )
A.指向int的指针
B.指向指针的指针(二级指针)
C.int类型的数组
D.两个指针变量
15.int a[5],*p1=&a[0],*p2=&a[3]; p2-p1的值是( )
A.12
B.4
C.3
D.1
16.在32位系统中,一个指针变量占用的字节数是( )
A.1
B.2
C.8
D.4
17.用指针p遍历数组a[n]的正确循环条件是( )
A.for(p=a;p<a+n;p++)
B.for(p=a;p<a+n;a++)
C.for(p=0;p<n;p++)
D.while(*p!=0)
18.const int *p; 的含义是( )
A.指针p本身不可修改
B.不能通过p修改它所指向变量的值
C.p指向的值和p本身都不可修改
D.p是常量指针
19.char s[]="ABC",*p=s; printf("%c",*(p+2));输出( )
A.A
B.B
C.C
D.空字符
20.int *p[5]; 定义的是( )
A.指向5个int的指针
B.指向int[5]数组的指针
C.一个int型指针
D.包含5个int*型指针的数组
二、判断题(共10题,每题1分,共10分。)
1.指针变量本身也占用内存空间,有自己的地址。( )
2.int *p; 定义后,*p的初始值自动为0。( )
3.数组名可以像指针变量一样进行自增(++)操作。( )
4.通过指针可以间接访问和修改它所指向的变量的值。( )
5.不同类型指针之间可以直接相互赋值,无需类型转换。( )
6.通过指向字符串常量的指针可以安全地修改字符串中的任意字符。( )
7.int a[5]; 则a和&a[0]的值完全相同。( )
8.函数可以返回一个局部变量的地址给调用者安全使用。( )
9.二级指针int **p可以通过两次间接访问**p获取最终int值。( )
10.同类型的两个指针可以进行比较运算(如<、>、==)。( )
三、填空题(共5题,每题2分,共10分。)
1.在32位系统中,一个指针变量通常占用____个字节的存储空间。
2.不指向任何有效地址的指针称为空指针,其宏名是____。
3.指针执行p++操作时,实际移动的字节数等于指针____类型所占的字节数。
4.void *类型的指针称为____指针,它可以指向任意类型的数据,但使用前需强制类型转换。
5.若int a=10,*p=&a; 则表达式&p取得的是指针变量____自身的地址。
四、读程序写结果题(共4题,每题5分,共20分。)
1.请阅读下列程序,写出运行结果。
#include <stdio.h>
int main()
{
int a = 5, *p = &a, **q = &p;
**q = **q + 3;
printf("%d", a);
return 0;
}
2.请阅读下列程序,写出运行结果。
#include <stdio.h>
int main()
{
char *s[] = {"AB", "CD", "EF"};
printf("%c", s[1][0]);
return 0;
}
3.请阅读下列程序,写出运行结果。
#include <stdio.h>
int main()
{
int a[] = {2, 4, 6, 8};
int *p = a + 1;
printf("%d", *(p + 2));
return 0;
}
4.请阅读下列程序,写出运行结果。
#include <stdio.h>
int main()
{
int x = 10, y = 20;
int *p = &x;
p = &y;
*p = 30;
printf("%d,%d", x, y);
return 0;
}
五、编程题(共2题,每题10分,共20分。)
1.编写一个函数getMax(int *a, int n, int **maxPtr),找出数组中最大值,并通过maxPtr返回指向最大值元素的指针。在main中调用并通过指针输出最大值。
2.编写一个函数countVowel(char *s),用指针方式统计字符串中元音字母(a/e/i/o/u大小写)的个数并返回。在main中调用。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$