指针部分选择题讲解
《C++指针》习题参考答案

《C++指针》习题学号姓名一、选择题1、有定义如下:int a[5], *p; 则下列描述错误的是 BA.表达式p=p+1是合法的B.表达式a=a+1是合法的C.表达式p-a是合法的D.表达式a+2是合法的2、函数定义为Fun(int &i),变量定义n=100,则下面调用该函数正确的是 CA.Fun(20) B.Fun(20+n) C.Fun(n) D.Fun(&n)3、若有说明int I,j=2,*p=&i;则能完成i=j赋值功能的语句是 BA.i=*p; B.*p=*&j; C.i=&j; D.i=**p;4、设已有定义char *st = "how are you";下列程序中正确的是 AA.char a[11],*p;strcpy(p=a+1,&st[4]);B.char a[11];strcpy(++a,st);C. char a[11];strcpy(a,st);D. char a[],*p;strcpy(p=a[1],st+2);5、设有数组int array[3][4],下列引用数组元素的方法中错误的是 DA.array[i][j] B.*(*(array+i)+j)C. *(array[i]+j)D. *(array+i*4+j)6、有定义int s[4][5],(*ps)[5];ps=s;则对数组s中元素引用的正确的是 CA.ps+1 B.*(ps+3) C. ps[0][2] D. *(ps+1)+37、设有说明int b[4][4],以下不能等价表示元素b[3][3]的是: BA.*&b[3][3] B.(*(*(b+3))+3) C.*(b[3]+3) D.*(*(b+3)+3)8、若有说明"char *s[]={"234","5678","9012","3456","7890"};",则表达式*s[1]> *s[3]比较的是 BA."1234"和"9012" B.'5'和'3' C.'l'和'9' D."5678"和"3456"9、设语句"char *s[]={"Student","Teacher","Father","Mother"},*ps=s[2];",执行语句"cout<<*s[1]<<','<<ps<<','<<*ps<<'\n';",则输出结果是 A A.T,Father,F B.Teacher,F,FatherC.Teacher,Father,Father D.语法错无输出10、设有以下说明语句:char sl[20]="hello",s2[20]="china";const char *ptr=s1;以下语句中不符合C++语法规则的语句是 DA.strcpy(s2,ptr); B.ptr=s2; C.ptr=ptr+4; D.*ptr=*s2; 11、设s和t分别为指向两个长度相同的字符数组的指针,则循环语句while( C );可以正确实现字符串t到s的完整复制功能。
教材课后题答案-第6章_指针习题答案

习题解答一、单项选择题1.若定义了int n=2, *p=&n, *q=p;则下面【】的赋值是非法的。
A.p=qB. *p=*qC. n=*qD. p=n【答案】D2.若定义了double *p, a;则能通过scanf函数给输入项读入数据的程序段是【】。
A.p=&a; scanf(“%1e”,p);B. *p=&a; scanf(“%1f”,p);C. p=&a; scanf(“%f”,p);D. p=&a; scanf(“%1f”,a);【答案】C3.若定义了int a[10], i=3, *p; p=&a[5];下面不能表示为a数组元素的是【】。
A.p[-5]B. a[i+5]C. *p++D. a[i-5]【答案】D4.若有如下定义:int n[5]={1,2,3,4,5},*p=n;则值为5的表达式是【】。
A.*+5B. *(p+5)C. *p+=4D. p+4【答案】C5.设变量b的地址已赋给指针变量ps,下面为“真”的表达式是【】。
A.b==&psB. b==psC. b==*psD. &b==&ps【答案】C6.设有以下定义和语句:int a[3][2]={1,2,3,4,5,6},*p[3];p[0]=a[1];则*(p[0]+1)所代表的数组元素是【】。
A.a[0][1]B. a[1][0]C. a[1][1]D. a[1][2]【答案】C7.若定义了char *str=”Hello!”;下面程序段中正确的是【】。
A.char c[ ], *p=c; strcpy(p,str);B.char c[5], *p; strcpy(p=&c[1],&str[3]);C.char c[5]; strcpy(c,str);D.char c[5]; strcpy(p=c+2,str+3);【答案】B8.若有下面的程序段,则不正确的fxy函数的首部是【】。
小学指南针试题及答案

小学指南针试题及答案一、选择题(每题2分,共10分)1. 指南针的发明者是:A. 张衡B. 毕昇C. 蔡伦D. 祖冲之答案:A2. 指南针的指针指向地球的:A. 南极B. 北极C. 赤道D. 地心答案:B3. 指南针的工作原理是利用:A. 地球的磁场B. 地球的重力C. 地球的自转D. 地球的公转答案:A4. 指南针上红色的指针通常指向:A. 南方B. 北方C. 东方D. 西方答案:A5. 指南针在航海中的主要作用是:A. 测量速度B. 测量深度C. 确定方向D. 记录时间答案:C二、填空题(每题2分,共10分)1. 指南针是利用地球的_________来指示方向的。
答案:磁场2. 指南针的发明可以追溯到中国的_________时期。
答案:战国3. 指南针的英文是_________。
答案:Compass4. 指南针上的指针在静止状态下,一端指向地球的_________,另一端指向地球的_________。
答案:北极,南极5. 在使用指南针时,应确保指南针与地面保持_________。
答案:水平三、判断题(每题1分,共10分)1. 指南针是中国古代四大发明之一。
(对)2. 指南针的发明对航海和地理探索有着重要的影响。
(对)3. 指南针只能在陆地上使用,不能在海上使用。
(错)4. 指南针的指针总是指向地球的北极。
(对)5. 指南针的发明者是毕昇。
(错)6. 指南针上的红色指针指向南方。
(对)7. 指南针的工作原理与地球的重力有关。
(错)8. 在使用指南针时,不需要考虑指南针与地面的角度。
(错)9. 指南针的发明对人类文明的发展有着深远的影响。
(对)10. 指南针在现代导航中已经完全被GPS所取代。
(错)四、简答题(每题5分,共20分)1. 简述指南针的发明对人类历史的影响。
答案:指南针的发明极大地促进了航海技术的发展,使得远洋航行成为可能。
它为地理大发现提供了重要的工具,促进了世界各地区的交流与贸易,对人类历史产生了深远的影响。
c语言二级选择题考点

c语言二级选择题考点C语言是一门广泛应用于计算机科学和软件开发领域的编程语言。
在C语言的学习过程中,选择题是常见的考核方式之一。
本文将针对C语言二级选择题的考点进行讨论,帮助读者更好地理解和应对这些考题。
一、数据类型和运算符1. 数据类型的选择在C语言中,数据类型是非常重要的概念。
选择题通常会涉及数据类型的选择,如int、float、char等。
对于这类问题,我们需要掌握不同数据类型的存储范围、精度以及对应的格式符。
同时,我们还需要了解数据类型之间的转换规则,以便正确选择数据类型。
2. 运算符的优先级和结合性选择题还会涉及运算符的优先级和结合性的问题。
我们需要熟悉C语言中运算符的优先级和结合性规则,以便正确判断表达式的运算结果。
二、控制结构1. 条件语句的判断选择题中常会涉及条件语句的判断,如if语句、switch语句等。
我们需要了解条件语句的语法结构和执行流程,并能正确判断条件的真假以及相应的执行结果。
2. 循环结构的选择循环结构也是选择题中常见的考点。
我们需要熟悉C语言中的循环语句,如for循环、while循环、do-while循环等,并能正确选择适合的循环结构以实现特定的功能。
三、函数和数组1. 函数的选择和调用选择题中会涉及函数的选择和调用的问题。
我们需要了解函数的定义和调用的语法规则,包括函数的返回值类型、参数的传递方式以及函数的调用方式等。
2. 数组的使用和操作选择题中也会涉及数组的使用和操作。
我们需要了解数组的定义和初始化的语法规则,以及数组的访问和操作方式。
此外,我们还需要掌握数组的内存分配和释放的知识,以便正确选择和使用数组。
四、指针和内存管理1. 指针的选择和操作选择题中常会涉及指针的选择和操作的问题。
我们需要了解指针的定义和初始化的语法规则,以及指针的访问和操作方式。
同时,我们还需要了解指针的指向和指针的运算的相关知识,以便正确选择和操作指针。
2. 动态内存管理选择题中还会涉及动态内存管理的问题。
c语言中fseek选择题

c语言中fseek选择题在C语言中,`fseek()`函数用于改变文件的位置指针的位置。
以下是一些关于`fseek()`的常见选择题:1. `fseek()`函数的原型是:A. `int fseek(FILE stream, int offset, int whence);`B. `int fseek(FILE stream, long offset, int whence);`C. `void fseek(FILE stream, long offset, int whence);`D. `long fseek(FILE stream, long offset, int whence);`答案:B。
2. 在`fseek()`函数中,`whence`参数的值是:A. 文件位置指针的当前位置B. 文件位置指针的起始位置C. 文件位置指针的结束位置D. 文件的大小答案:B。
3. 如果要在文件内部移动文件位置指针,应将`whence`参数设置为:A. `SEEK_SET`B. `SEEK_CUR`C. `SEEK_END`D. 以上都可以答案:A。
4. 如果要在文件开头和文件尾部之间移动文件位置指针,应将`whence`参数设置为:A. `SEEK_SET`B. `SEEK_CUR`C. `SEEK_END`D. 以上都可以答案:C。
5. 如果要在文件内部移动文件位置指针,并将偏移量设置为0,应将偏移量参数设置为:A. 0B. `ftell()`函数的返回值C. `fsize()`函数的返回值D. `fread()`函数的返回值答案:A。
C语言指针练习题解析

一、知识点1.掌握指针、地址、指针类型、空指针(NULL)等概念;2.掌握指针变量的定义和初始化、指针的间接访问、指针的加减运算、指针变量比较运算和指针表达式;3.掌握指针与数组、函数、字符串等的联系;4.掌握动态空间操作(new,delete);5.掌握引用参数的使用。
二、例题分析与解答例题1:若有以下定义,则说法错误的是( )。
int a=100,*p=&a ;A.声明变量p,其中*表示p是一个指针变量B.变量p经初始化,获得变量a的地址C.变量p只可以指向一个整形变量D.变量p的值为100答案:D分析:有指针变量定义可知A、C说法是正确的,故不能选。
在语句中&p=a,表示指针变量取得变量a地址,B说法也正确,也不能选择。
D中不能说变量p的值为100,应该*p的值为100,所以选择D。
例题2:若有以下定义,则赋值正确的是( )。
int a ,b , *p;float c, *q;A.p=&c B.q=p C.p=NULL D.q=new int答案:C分析:指针变量使用规定,不同类型的指针变量不能赋值,也不能取得普通变量地址,故A、B不正确,不能选择。
因为q是float类型指针变量,不能申请int 类型地址,D不正确,也不能选择。
因为任何类型的指针变量都能取得NULL指针,所以C正确。
例题3:如果x是整型变量,则合法的形式是( )。
A.&(x+5) B.*x C.&*x D.*&x答案:D分析:因为C++语言表达式没有地址,A不正确。
C++语言普通变量不能用*运算,因此B和C也不正确。
&x 表示变量x的地址,*&x是x 地址的值,所以D正确。
例题4:若要建立如下关系,错误的语句组是( )。
span style='mso-ignore:vglayout; ;z-index:1;left:0px;margin-left:144px;margin-top:1px;width:256px;height:38px'A. B. C. D.int *p=&x, x; int x, p=&x; int *p, x=10; int *p, x;*p=10; *p=10; *p=&x; p=&x ; x=10;答案:A分析:在变量类型说明语句中 *表示变量是指针变量,在其他语句中,*称为指针运算,用于访问指针所指向的对象的值,&称为取地址运算,用来得到一个对象的地址。
C++语言选择题40道:C++智能指针:auto_ptr

C++智能指针试题1.auto_ptr在C++11中被标记为已弃用,主要因为它具有哪个性质导致资源管理混乱?o A. 所有权转移时的浅拷贝o B. 可以显式释放资源o C. 强制类型转换的构造函数o D. 没有引用计数答案: A解析: auto_ptr在拷贝构造和赋值操作时,仅进行所有权转让,而不是深拷贝,这可能导致原对象的资源被释放后,新对象仍试图使用已被释放的资源,造成悬挂指针。
2.假设有一个unique_ptr对象uptr,以下哪个操作是非法的?o A. uptr->func();o B. (*uptr).func();o C. uptr = nullptr;o D. uptr = uptr;答案: D解析: unique_ptr不允许自我赋值,因为这会导致资源管理混乱,即两次释放相同的资源。
3.shared_ptr的主要优势是什么?o A. 自动管理资源的生命周期o B. 所有权的唯一性o C. 可以在不同线程间安全地传递o D. 消耗的资源比auto_ptr和unique_ptr少答案: A解析: shared_ptr通过引用计数管理资源的生命周期,当引用计数为0时自动释放资源,从而允许多个shared_ptr实例共享相同的资源。
4.以下哪项描述了unique_ptr和shared_ptr之间的一个关键区别?o A. unique_ptr可以使用new[]分配的数组o B. shared_ptr可以被复制和转移o C. unique_ptr支持任意类型o D. shared_ptr的析构函数是公有的答案: B解析: unique_ptr不支持复制和转移所有权,而shared_ptr通过引用计数机制支持复制和所有权的共享。
5.在以下代码片段中,ptr指向的对象何时被销毁?o B. 当weakPtr离开作用域时o C. 当ptr引用计数变为0时o D. 代码编译错误,无法执行答案: C解析: shared_ptr在引用计数为0时会释放资源,当ptr被赋值为weakPtr (实质上是一个shared_ptr)时,原ptr指向的对象的引用计数变为0。
指针练习题及答案

六、指针习题及答案一、单项选择题1. *p最终值是( D)int *p,b=10;static int a[]={2,3,4,1,5,6};p=a;p+=3;a[3]=b;A. 1B. 3C. 4D. 102. *p最终值是( A )char b[10]= "abcdefghi",*p;p=b+5;A. ’f’B. ’g’C. ’h’D. ’e’3. 有一个二维数组a[3][4],其2行3列元素a[2][3]的正确表示方法为( D )。
A. &a[2][3]B. a[2]+3C. *(a+2)+3D. *(a[2]+3)4. 指向一个包含4个整型元素的一维数组的行指针变量的定义形式为( D )。
A. int (*p)[]B. int *p[4]C. int *(p[])D. int (*p)[4]5. 4个指向int型元素的指针构成一个一维指针数组的定义形式为( B )。
A. int (*p)[]B. int *p[4]C. int *(p[])D. int (*p)[4]6. 若char *str1="china",char *str2="student";则语句strcpy(str2,str1)执行后,str2的值为( A )。
A. chinaB. studentC. studentchinaD. chinastudent7.若有以下定义和语句:int a[]={1,2,3,4,5,6,7,8,9,0}, *p=a;则值为3的表达式是( B )。
A. p+=2,*(++p)B.p+=2,*p++C.p+=3,p++D. p+=2,++*p8.若有以下定义:char s[20]="programming", *ps=s;则下列不能代表字符“o”的表达式是( A )。
A. ps+2B. s[2]C. ps[2]D.ps+=2,*ps9. 若有定义和语句:int **pp,*p, a=10,b=20;pp=&p;p=&a;p=&b;cout<<*p<<","<<**pp;则输出结果是: ( D )。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9.下面判断正确的是 。 (A)char *a=”china”; 等价于char *a; *a=”china”; (B)char str[10]={“china”}; 等价于 char str[10]; str={“china”}; (C)char *s=”china”; 等价于 char *s; s=”china”; (D)char c[4]=”abc”,d[4]=”abc”; 等价于 char c[4]=d[4]=”abc”;
• 12.设p1和p2 是指向同一个字符串的指针 变量,c为字符变量,则以下不能正确执行 的赋值语句是 。
• (A)c=*p1+*p2; • (C)p1=p2; (B)p2=c; (D)c=*p1*(*p2);
13.下面程序段的运行结果是 。 char *format=”%s, a=%d, b=%d\n”; int a=1, b=10; a+= b; printf(format, “a+=b”, a, b); (A)for, “a+=b”,ab (C)a+=b, a=11, b=10 (D)以上结果都不对 (B)format, “a+=b”
(A)strcpy(s1, “string1”); (B)strcpy(s4, ”string9”); (C)strcpy(s3, “string3”); (D)strcpy( s2, s1 );
17.下面程序的功能是从输入的10个字符串中找出 最长的一串,请选择填充。
# include “stdio.h” # include “string.h” #define N 10 main( ) { char str[N][81], *sp; int i ; for( i=0; i<N; i++ ) gets(str[ i ]); sp=【 1 】; for( i=1; i<N; i++ ) if(strlen(sp)<strlen(str[i])) sp=【2】; cout<<strlen(sp)<<“ “<<sp <<endl; }
• 3.有四组对指针变量进行操作的语句,判断正确 的选项是 。 (1)int *p, *q; q = p; int a, *p, *q; p=q=&a; (2)int a, *p, *q; q=&a; p=*q; int a=20, *p; *p=a; (3)int a=b=0, *p; p=&a; b=*p; int a=20, *p, *q=&a; *p=*q; /*p无指向*/ (4)int a=20, *p, *q=&a; p=q; int p, *q; q=&p;
• 7.已有说明:float *p, m=3.1415; 则正确 的赋值语句是 。 • • • • (A)p=m; (B)p=&m; (C)*p=m; (D)*p=&m;
• 8.若有说明:int *p, m=5, n; 以下正确的程 序段是 。 • • • • (A)p=&n; cin>>p; (B)p=&n; cin>>&p; (C)cin>>n; *p=n; (D)p=&n; *p=m;
20.下面程序的功能是统计子串substr在母串str 中出现的次数,请填充。 #include <stdio.h> main( ) { char str[80], substr(80); int n; gets( str ); gets( substr ); cout<< count(str, substr) <<endl; } count( char *str, char *substr ) { int i, j, k , num=0 ; for( i=0; 【1】;i++ ) for(【2】, k=0; substr[k]== str[j]; k++, j++ ) if( substr[k+1]= =‟\0‟ ) { num ++; break ; } return( num ); } • 【1】(A)str[i]==substr[i] (B) str[i]!=‟\0‟ • (C)str[i]==‟\0‟ (D)str[i]>substr[i]
。
( #include “stdio.h” void delch( char *s ) { int i, j; char *a; a=s; for( i=0, j=0; a[i]!=‟\0‟; i++ ) if( a[i]>=‟0‟ && a[i]<=‟9‟ ) { a[ j ]=a[ i ]; j++; } s[ j ]=‟\0‟; } main( ) { char *item=”abc345def”; delch( item ); cout<<item <<endl; } (A) abc (B) 345 (C)abcdef (D)abc345def
【1】(A)*a!=‟\0‟ (B)*a!=NULL (D) !a* ==0 【2】(A)*(a-1) (B)*a (D)*(a- -) (C)!*a
(C) *(a+1)
22. 下面程序的运行结果是 。 #include “stdio.h” main( ) { static char a[ ]=”Language”, b[ ]=”program”; char *p1, *p2 ; int k; p1=a; p2=b; for( k=0; k=7 ; k++ ) if( *(p1+k)= =*(p2+k) ) cout<<*(p1+k ) ; cout<<endl; } • (A)gae (B)ga (C) Language • (D)语法错
14.下面程序段的运行结果是 。 char *p= “%d, a=%d, b=%d\n ”; int a=111, b=10, c; c= a%b; p+=3; printf( p, c, a, b );
(A)1,a=111,b=10 (B)a=1,b=1 (C)a=111,b=10 (D)以上结果不对
指针部分选择题讲解
1.写出以下程序的运行结果 void sub( int x, int y, int *z ) { *z = y – x ; }
。
main( ) { int a, b, c; sub( 10, 5, &a ); sub( 7, a , &b); sub( a, b, &c ); cout<<a<<“ ,” << b<<“,”<< c<<endl; } (A)5,2,3 (B)-5,-12,-7 (C)-5,-12,-17 (D)5,-2,-7
• 19.下面程序的功能是将八进制正整数字符串转换为十进 制整数,请选择填空。 #include “stdio.h” #include “string.h” main( ) { char *p , s[6]; int n; p=s ; gets( p ); n=【1】; while(【2】!=‟\0‟) n=n*8+ *p-„0‟ ; cout<<n<<endl; } 【1】(A)0 (B) *p (C) *p-„0‟ (D)*p+‟0‟ 【2】(A)*p (B) *p+ + (C) *(+ + p ) (D)p
• 10.设 char *s=”\ta\017bc”; 则指针变量s 指向的字符串所占的字节数是 。 • (A)9 • (C)6 (B)5 (D)7
为什么是6, 结束符占位.
• 11.下面能正确进行字符串赋值操作的 是 。 • • • • (A) (B) (C) (D) char s[5]={“ABCDE”}; char s[5]={ „A‟,‟B‟,‟C‟,‟D‟,‟E‟}; char *s; s=”ABCDE”; char *s; scanf(“%s”, *s);
• 5.若有以下定义和语句,则选项中错误的 语句是 。 int a=4, b=3, *p, *q, *w; p=&a; q=&b; w=q; q=NULL; (A) *q = 0; (C) *p=a;
分析: 由于q=NULL; 所以 *q=0; 为错.
(B) w=p; (D)*p = *w;
• 6.若有语句 int *point, a=4; 和 point=&a; 下面均代表地址的一组选项是 。 • • • • (A) (B) (C) (D) a, point, *&a &*a, &a, *point *&point, *point, &a &a, &*point, point
• 【2】(A)j=i+1 (B)j= i (C)j=0 (D)j=1
21. 下面程序的功能是将字符串s 中的内容按逆序输出,但 不改变串中的内容,请选择填充。 #include “stdio.h” main( ) { char s[10]=”I love China!”; inverp(s); } inverp( char *a ) { if (【1】) return 0; inverp( a+1 ); cout<< 【2】; cout<<endl; }
• 4.以下程序中调用cin 函数给变量 a 输入数值的方 法是错误的,其错误原因是 。 • main( ) • { int *p, *q, a, b; • p= &a; • cout<<“input a:”; cin>>p; • … • }