第14卷 指针 《C语言程序设计》吉林省对口招生《电子与信息类考纲百套卷》

2026-07-16
| 2份
| 26页
| 11人阅读
| 0人下载

资源信息

学段 中职
学科 职教专业课
课程 C语言程序设计
教材版本 -
年级 -
章节 -
类型 题集-专项训练
知识点 指针
使用场景 中职复习
学年 2027-2028
地区(省份) 吉林省
地区(市) -
地区(区县) -
文件格式 ZIP
文件大小 174 KB
发布时间 2026-07-16
更新时间 2026-07-16
作者 xy06893
品牌系列 学易金卷·考纲百套卷
审核时间 2026-07-16
下载链接 https://m.zxxk.com/soft/58824342.html
价格 3.00储值(1储值=1元)
来源 学科网

内容正文:

编写说明: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中调用。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

第14卷 指针 《C语言程序设计》吉林省对口招生《电子与信息类考纲百套卷》
1
第14卷 指针 《C语言程序设计》吉林省对口招生《电子与信息类考纲百套卷》
2
第14卷 指针 《C语言程序设计》吉林省对口招生《电子与信息类考纲百套卷》
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。