2-指针与引用练习题

合集下载

指针练习题

指针练习题

编程题1用指向数组的指针变量输出数组的全部元素2 使用函数调用,形参为指针,实参为数组,把一个数组逆序存放在输出练习题:一判断题1.指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址值,这两个地址值是相等的。

2.指针的类型是它所指向的变量或对象的类型。

3.定义指针时不可以赋初值。

4.指针可以赋值,给指针赋值时一定要类型相同,级别一致。

5.指针可以加上或减去一个int型数,也可以加上一个指针。

6.两个指针在任何情况下相减都是有意义的。

7.数组元素可以用下标表示,也可以用指针表示。

8.指向数组元素的指针只可指向数组的首元素。

9.字符指针是指向字符串的指针,可以用字符串常量给字符指针赋值。

10.引用是一种变量,它也有值和地址值。

11.引用是某个变量的别名,引用是被绑定在被引用的变量上。

12.创建引用时要用一个同类型的变量进行初始化。

13.指针是变量,它可以有引用,而引用不能有引用。

二单选题1.下列关于定义一个指向double型变量的指针,正确的是()。

A.int a(5);double *pd=a;B.double d(2.5),*pd=&d;C.double d(2.5),*pd=d;D.double a(2.5),pd=d;2.下列关于创建一个int型变量的引用,正确的是()。

A.int a(3),&ra=a;B.int a(3),&ra=&a;C.double d(3.1);int &rd=d;D.int a(3),ra=a;3.下列关于指针概念的描述中,错误的是()。

A.指针中存放的是某变量或对象的地址值B.指针的类型是它所存放的数值的类型C.指针是变量,它也具有一个内存地址值D.指针的值是可以改变的4.下列关于引用概念的描述中,错误的是()。

A.引用是变量,它具有值和地址值B.引用不可以作数组元素C.引用是变量的别名D.创建引用时必须进行初始化5.已知:int a[5],*p=a;则与++*p相同的是()。

指针与指针运算例题及练习题

指针与指针运算例题及练习题

指针与指针运算例题及练习题
指针是C语言中非常重要的概念之一,通过指针可以直接访问
和操作内存中的数据。

指针运算是指针在C语言中的特定运算操作。

下面是一些指针与指针运算的例题及练题,供研究和练使用:
1. 请用指针实现一个交换函数,该函数可以交换两个整数的值。

2. 请编写一个函数,接受一个整数数组和数组长度作为参数,
计算数组中所有元素的和,并返回结果。

3. 编写一个函数,接受一个整数数组和数组长度作为参数,找
出数组中的最大值,并返回其索引位置。

4. 编写一个函数,接受一个字符串作为参数,并返回字符串中
第一个出现的大写字母。

5. 请实现一个函数,接受一个字符串和一个字符作为参数,统
计字符串中包含该字符的个数,并返回结果。

6. 对于一个整数数组,编写一个函数,接受数组和数组长度作为参数,并将数组按照升序排列。

希望以上例题和练题可以帮助你更好地理解和掌握指针与指针运算的概念。

如果有任何问题或需要进一步帮助,请随时告知。

C语言指针习题及答案

C语言指针习题及答案

指针主要内容的习题及答案一.选择题1.变量的指针,其含义是指该变量的 B 。

A)值B)地址C)名D)一个标志2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是 B 。

A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3.若有说明:int *p,m=5,n;以下程序段正确的是 D 。

A)p=&n ; B)p = &n ;scanf(“%d”,&p); scanf(“%d”,*p);C)scanf(“%d”,&n); D)p = &n ;*p=n ; *p = m ;4.已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结果是 D 。

void print_value(int *x){ printf(“%d\n”,++*x); }A)23 B)24 C)25 D)265.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是C 。

A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ; C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ;6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是D 。

A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7.下面判断正确的是 C 。

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” ;8.下面程序段中,for循环的执行次数是 C 。

指针习题——精选推荐

指针习题——精选推荐

指针习题指针的基本概念⼀、选择题1.有如下程序段int *p ,a=10 ,b=1 ;p=&a ; a=*p+b ;执⾏该程序段后,a 的值为。

A. 12B. 11C. 10D. 编译出错2.若有以下定义和语句:double r=99 , *p=&r ;*p=r ;则以下正确的叙述是。

A. 两处的*p 含义相同,都说明给指针变量p 赋值B. 在"double r=99,*p=&r;"中,把r 的地址赋值给了p 所指的存储单元C. 语句"*p=r;"把变量r 的值赋给指针变量pD. 语句"*p=r;"取变量r 的值放回r 中3.分析下⾯函数,以下说法正确的是。

swap(int *p1,int *p2){ int *p;*p=*p1; *p1=*p2; *p2=*p;}A. 交换*p1和*p2的值B. 正确,但⽆法改变*p1和*p2的值C. 交换*p1和*p2的地址D. 可能造成系统故障,因为使⽤了空指针⼆、读程序题,写出程序运⾏的结果。

4.#includevoid main(){ int *p1,*p2,*p;int a=5,b=8;p1=&a p2=&bif(aprintf("%d,%d\n",*p1,*p2);printf("%d,%d\n",a,b);}5.void prtv(int * x){ printf("%d\n",++*x);}void main(){ int a=25 ;prtv(&a);}6.void ast(int x,int y,int *cp,int *dp){ *cp=x+y; *dp=x-y; }void main(){ int a,b,c,d;a=4; b=3;ast(a,b,&c,&d);printf("%d,%d\n",c,d);}指针和数组⼀维:7.若有以下定义和语句,且0≤i<10则对数组元素的错误引⽤是。

指针经典练习题及答案

指针经典练习题及答案

二、程序题1、计算字符串中子串出现的次数。

要求:用一个子函数subString()实现,参数为指向字符串和要查找的子串的指针,返回次数。

2、加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。

算法:明文中的字母转换成其后的第4个字母,例如,A变成E(a变成e),Z变成D,非字母字符不变;同时将密文每两个字符之间插入一个空格。

例如,China转换成密文为G l m r e。

要求:在函数change中完成字母转换,在函数insert中完成增加空格,用指针传递参数。

3、字符替换。

要求用函数replace将用户输入的字符串中的字符t(T)都替换为e(E),并返回替换字符的个数。

4、编写一个程序,输入星期,输出该星期的英文名。

用指针数组处理。

5、有5个字符串,首先将它们按照字符串中的字符个数由小到大排列,再分别取出每个字符串的第三个字母合并成一个新的字符串输出(若少于三个字符的输出空格)。

要求:利用字符串指针和指针数组实现。

6、定义一个动态数组,长度为变量n,用随机数给数组各元素赋值,然后对数组各单元排序,定义swap函数交换数据单元,要求参数使用指针传递。

7、实现模拟彩票的程序设计:随机产生6个数字,与用户输入的数字进行比较,输它们相同的数字个数(使用动态内存分配)。

/*1、计算字符串中子串出现的次数。

要求:用一个子函数subString()实现,参数为指向字符串和要查找的子串的指针,返回次数。

*/#include<stdio.h>int subString(char *a, char *b){int i = 0;int j = 0;int m = 0;char *p = b;while(*a){while(*a){if(*a == *b){break;}a++;}while(*b){if(*a != *b){return m;}else{m = m;}b++;a++;}// a++;b = p;++m;}return m;}int main(){char a[100];char b[100];printf("请输入字符串a:");gets(a);printf("请输入字符串b:");gets(b);printf("%d", subString(a, b));return 0;}/*2、加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。

指针练习题及答案

指针练习题及答案

六、指针习题及答案一、单项选择题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 )。

c++ 笔试 指针题

c++ 笔试 指针题

C 指针和引用基础概念测试题
C++笔试中的指针题是指涉及C++指针和引用的相关题目,通常出现在编程语言考试中,用于测试学生对指针和引用的理解及运用能力。

以下是几个C++笔试指针题的示例:
1.定义一个指向整数的指针,并使用该指针将一个整数变量初始化为42。

2.编写一个程序,通过指针来交换两个变量的值。

3.定义一个指向函数的指针,该函数返回一个整数,并接受两个整数参数。

请为该函数指针声明一个变量,并将其指向一个实现累加功能的函数。

4.编写一个程序,使用指针来遍历一个整数数组,并输出每个元素的值。

5.定义一个指向类的成员函数的指针,并使用该指针调用该成员函数。

这些题目都是关于C++指针和引用的基本概念和操作的测试题目,旨在检验学生对指针和引用的理解及运用能力。

通过练习这些题目,学生可以加深对指针和引用的理解,提高自己的编程技能。

C++习题(指针和引用)

C++习题(指针和引用)

C++习题(指针和引用)习题(指针和引用)一、选择题1.在整型指针变量p1、p2的定义中,错误的是A)int x,*p1,p2; B)int *p1,x,*p2;C)int x,*p1=&x,*p2; D)int *p1,x,*p2=&x,;2.正确的程序段是A)int *p; cin>>*p;…B)int *p,k; *p=100;…C)int *p1,k; char *p2,c; p1=&k p2=&c *p2=’A’;…D)int *p1,k; char c; p1=&c …3.若有定义double x=3.14,*p=&x则*p等价于A)&xB)*xC)3.14D)x4.若有以下程序段:int *p,x,y=1;p=&x*p=10;x=*p+y;执行该程序段后,x的值是A)12B)11C)10D)编译出错5.若有int *p[3];则以下表述中正确的是A)p是一个指向有3个元素的整型数组的指针B)p是一个指向int型变量的指针C)p是一个有3个元素的指针数组,每个元素是一个int型指针D)p是一个数组,该数组的元素是指针p所指向的变量6.若有int (*p)[3];则以下表述中正确的是A)p是一个指向有3个元素的整型数组的指针B)p是一个指向int型变量的指针C)p是一个有3个元素的指针数组,每个元素是一个int型指针D)p是一个数组,该数组的元素是指针p所指向的变量7.若有int a[]={2,4,6,8,10};int *p=a;则第2个数组元素的正确表示为A)*p++B)p+2C)&(p+2)D)*(p+2)8.若有int k=1,a[10]={10,20,30,40};int *p1=a,*p2=&a[2];则下列不能正确执行的语句是A)k=*p1+*p2B)p2=kC)p1=p2D)k=p2-p19.已知指针p的指向如下图所示,则执行语句*--p;后,*p的值是A)30B)20C)19D)29a[0] a[1] a[2] a[3] a[4]10 20 30 40 50p10.若有int a[]={1,2,3,4,5,6,7,8,9,10},*p=a;则值为3的表达式是A)p+=2,*(p++)B)p+=2,*++pC)p+=3,*p++D)p+=2,++*p11.下列程序的功能是输出数组中的最大值,其中用指针q指向该元素,在if语句中的判断表达式应该是#includevoid main(){int a[10]={ 6,7,2,9,1,10,5,8,4,3};int *p=a,*q=a;while(p-a<10){if(_________) q=p;p++;}cout<<”max”<<*q;}则值为3的表达式是A)&p>&qC)p>qD)p-a>p-q12.执行下面程序后,输出结果是#includevoid main(){int a[2][3]={ {1,2,3},{4,5,6}};int k,*p;p=& a[0][0];k=(*p)*(*(p+2))*(*(p+4));cout<<k<<endl;< p="">}A)15B)10C)13D)20#includevoid main(){int a[3][4]={ {1,3,5,7},{9,11,13,15},{17,19,21,23}}; int (*p)[4]=a; int i,j,s=0;for(i=0;i<2;i++)for(j=0;j<4;j++)s=s+*(*(p+i)+j);cout<<s<<endl;< p="">}A)64B)8C)9014.若有int a[4][3]={ 1,2,3,4,5,6,7,8,9,10,11,12}; int (*q)[3]=a,*p=a[0];则能够正确表示数组元素a[1][2]的表达式是A)*((*q+1)[2])B)*(*(p+5))C)(*q+1)+2D)*(*(a+1)+2)15.不能正确赋值的选项是A)char s1[10]; s1=”Hello”;B)char s2[]={‘H’,’e’,’l’,’l’,’o’};C)char s3[10]=”Hello”;D)char *s4[10]={“Hello”};#includevoid main(){char a[]=”China”;char b[]=”Bratain”,*p1,*p2;int k;p1=a;p2=b;for(k=0;p1[k]&&p2[k];k++)if(*(p1+k) ==*(p2+k))cout<<*(p1+k);}A)bcB)hC)iaD)a17.下面程序的输出为#includevoid main(){char *s=”123456”;s+=3;cout<<s<<endl;< p="">}A)456B)字符4的ASCⅡ码值C)出错D)2345618.若有char *a[2]={“abcd”,”ABCD”};则下面的表述正确的是A)a数组元素的值分别是“abcd”和”ABCD”B)a是一个指针变量,它指向含有两个数组元素的字符型一维数组C)a数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址D)a数组的两个元素中各自存放了字符’a’和’A’的地址#includevoid main(){char *p1,*p2,s[50]=”xyz”;p1=”abcd”;p2=”ABCD”;strcpy(s+2,strcat(p1+2,p2+1));cout<<s;< p="">}A)xyabdABB)abcABzC)ABabczD)xycdBCD20.下面程序的输出结果为#includevoid main(){int a[]={1,2,3,4,5,6},*p,**q;p=a;q=&pcout<<*(p++);cout<<**q<<endl;< p="">}A)34B)56C)12D)2321.在下面的引用定义中,正确的是A)int x,&y y=x;B)int x,&y=x;C)int &y=x,x;D)float z; int x,y=&z#includevoid main(){int x=20;int &y=x;cout<<(x==y)<<””;cout<<(&x==&y)<<endl;< p=""> }A)20 20 20 20B)20 20C)1 1D)出错二、填空题1.若有int a[5],*p=a;则数组元素a[3]可以表示为*(p+ ⑴),也可以表示为p[ ⑵ ].2.下面程序的输出结果是#includevoid main(){int x=3,y=4;int *p1=&x,*p2=&yx=*p1*2;y=(*p1)*(*p2)+2;cout<<”x=”<<x<<endl;< p="">cout<<”y=”<<y<<endl;< p="">}3.以下程序的输出结果是#includevoid main(){int a[]={30,25,20,15,10,5},*p=a;p++;cout<<*(p+3)<<endl;< p="">}4.若有int a[5]={1,2,3,4,5};int *p,*q;请对以下问题进行填空。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++程序设计课件 设计制作:徐龙琴 16
改后的运行结果为: 运行结果为: a[0]=0 a[0]=0 a[1]=1 a[1]=1 a[2]=4 a[2]=4 a[3]=9 a[3]=9 a[4]=16 a[4]=16 a[5]=25 a[5]=25 a[6]=36 a[6]=36 a[7]=49 a[7]=49 a[8]=64 a[8]=64 a[9]=81 a[9]=81 *a=0 a=0x0065FDCC
//p 为指针数组
int (*p)[n]; //p 为指向数组的指针变量 int *p( );
//p 为返回指针型的函数
int (*p) ( ); //p 为函数指针
int **p;
//p 为指向指针的指针变量
C++程序设计课件
设计制作:徐龙琴
8
4 指出下列程序的错误。 #include <iostream.h> void exchange(int,int); void exchange(int*,int*); exchange(int&,int&); void main() void main() {cout<<"Input two data seprated by space:"; {cout<<"Input two data seprated by space:"; int a,b; int a,b; int a,b,*p1=&a,*p2=&b; cin>>a>>b; cout<<"Before Exchange:a="<<a cin>>a>>b; cin>>a>>b; <<",b="<<b<<endl; cout<<"Before Exchange:a="<<a<<",b="<<b<<endl; cout<<"Before Exchange:a="<<a<<",b="<<b<<endl; exchange(a,b); exchange(a,b); exchange(p1,p2); cout<<"After Exchange:a= "<<a cout<<"After Exchange:a="<<a<<",b="<<b<<endl; cout<<"After Exchange:a="<<a<<",b="<<b<<endl; <<",b="<<b<<endl; }} void exchange(int x,int y)&y) &x,int *x,int *y) { int t; {int t;t; { int t=x;x=y;y=t; t=x;x=y;y=t; t=*x;*x=*y;*y=t; } } }
运行结果为: 12 6
C++程序设计课件
设计制作:徐龙琴
15
7 阅读程序,给出运行结果。 #include<iostream.h> void main() { int i,a[10]; int *p1,*p2; p1=a; p1=&a[0]; p2=p1+5; for (i=0;i<=9;i++) {a[i]=i*i; p1= 0x0065FDCC,p2= 0x0065FDED p1= 0x0065FDCC,p2= 0x0065FDED cout<<"a["<<i<<"]="<<a[i]<<endl;} p2-p1=5 p2-p1=5 *p1-*p2=25 25 a[5]-a[0]= cout<<"*a="<<*a <<endl; cout<<"a="<<a<<endl; cout<<"p1="<<p1<<",p2="<<p2<<endl; cout<<"p2-p1="<<p2-p1<<endl; cout<<"*p2-*p1="<<*p2-*p1<<endl; cout<<"a[5]-a[0]="<< a[5]-a[0] <<endl; }
a
{ int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; printf("%d", *(p+2)); } a. 3 b. 4 c. 1 d. 2
设计制作:徐龙琴 1
C++程序设计课件
3、若0<i<10,则对数组元素地址的正确表示是: d int a[]={1,2,3,4,5,6,7,8,9,0},*p,i; p=a; a.&(a+1) c.*p b.a++ d.&p[i]
p=&a[0];
x=*(p+2); y=*(p+4); printf("*p=%d,x=%d,y=%d\n",*p,x,y); return; } 运行结果为: *p=1,x=3,y=5
C++程序设计课件
设计制作:徐龙琴
11
3
#include<iostream.h> void callbyval(int a,int b,int c) {a=3;b=2;c=1;} void callbypointer(int* a,int* b,int* c) {*a=3;*b=2;*c=1;} void callbyreference(int& a,int& b,int& c) { a=1;b=2;c=3;} void main() { int a=1,b=2,c=3; int& a1=a; int& b1=a; int& c1=a; callbyval(a,b,c); cout<<a<<b<<c<<endl; callbypointer(&a,&b,&c); cout<<a<<b<<c<<endl; callbyreference(a1,b1,c1); cout<<a<<b<<c<<endl;}
B)相加 D)赋值
运算是没有意义的。
13、已知指针p的指向下图所示,则表达式*--p的值是: 20
a[0]在低地址,a[1]在高地址
C++程序设计课件
设计制作:徐龙琴
5
二 下列程序有无错误: 1、 #include <iostream.h> int fun1(int); int fun2(int); void main() { int i=12; int (*fp)(); int (*fp)(int); fp = fun1; cout<<"Fun1:"<<(*fp)(i)<<endl; fp = fun2; cout<<"Fun2:"<<(*fp)(i)<<endl;} int fun1(int k) { k = k*2+1; return k;} int fun2(int m) { m = m/2+1; return m;}
C++程序设计课件
运行结果为: 10,0 10,0 21,31 21,31 22,32 22,32
14
设计制作:徐龙琴
6
#include <iostream.h> void main() { int a[2][3]={1,2,3,4,5,6}; int i,j,(*p)[3]; p=a; cout<<"input i,j:"; cin>>i>>j; cout<<"a["<<i<<","<<j<<"]= " <<*(*(p+i)+j)<<endl; }
9、设有以下函数定义,则该函数返回的值是 a int * fun(int a) {int *t,n; n=a;t=&n; return t;} a.一个不可用的存储单元地址值 b.一个可用的存储单元地址值 c.n中的值 d.形参a中的值 10、下面函数的功能是: a int fun(char *x) {char *y=x; while(*y++){}; return y-x-1;} a. 求字符串的长度 b. 求字符串存放位置 c. 比较两个字符串的大小 d. 将字符串x连接到字符串y后面
设计制作:徐龙琴
C++程序设计课件
4
11、用new为int数组分配10个存储空间,下面哪个语句正确 B A) int *p=new; C) int *p=new int[]; A)相减 C)比较 B) int *pint;
相关文档
最新文档