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;请对以下问题进行填空。

指针经典练习题(含答案版)二

指针经典练习题(含答案版)二

17.若有说明语句:int a,b,c,*d=&c;,则能正确从键盘读
入 3 个整数分别赋给变量 a,b,c 的语句是( A )
A)scanf(“%d%d%d”,&a,&b,d);
B)scanf(“%d%d%d”,&a,&b,&d);
C)scanf(“%d%d%d”,a,b,c);
D)scanf(“%d%d%d”,a,b,*d);
#include<stdio.h>
#include<string.h>
fun (char *w,int n)
{ char t,*s1,*s2;
s1= w; s2=w+n-1;
while(s1<s2) {t=*s1++;*s1=*s2--;*s2=t}
}
main()
{char *p;
p=”12234567”;
2
A)1 2 3 4 B)4 3 2 1 C)0 0 0 0 D)4 4 4 4
27.说明语句 int *(*p)( )的含义(D)
A)p 是一个指向 int 型数组的指针
B)p 是指针变量,它构成了指针数组
C)p 是一个指向函数的指针,该函数的返回值是一个整

D)p 是一个指向函数的指针,该函数的返回值是一个
char str[ ]=”Hello”; char *ptr; ptr=str; 执行上面的程序段后,*(ptr+5)的值为( B) A)’o’ B)’/0’ C)不确定的值 D)’o’的地址 25.下面函数的功能是(B) sss(s,1) char *s,*t; { while((*s)&&(*t)&&(*t++=*s++));

(完整word版)C语言指针练习+答案+讲解

(完整word版)C语言指针练习+答案+讲解

第七章指针7.1 选择题1.若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(D)。

A. p=q; B. *p=*q; C. a=*q; D. q=a;a是整型数,int *p,*q定义了指针,p,q是指向整型的指针.p取得a的地址,而q取得p的地址p,q是指针(也就是一个地址),而*p和*q是这个指针指向的整型数值(存放在这个地址的值).A)把q的地址赋给p,则p和q完全一样了,都指向一个数2B)把q中数据个pC)把q中数据给aD)a中数据是2,不能够给一个地址。

除非*q=a2.若定义:int a=511, *b=&a;,则printf("%d\n”, *b);的输出结果为:D A.无确定值 B. a的地址 C. 512 D. 511int a=511,*b=&a;a 是整形变量b 是整形指针变量,指向 aprintf("%d\n",*b);就是输出指针变量 b,所指变量的值输出结果5113.已有定义int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是(B)。

A. a=*p1+*p2; B. p1=a; C. p1=p2; D. a=*p1*(*p2);47、已知在程序中定义了如下的语句:int *P1,*P2;int k;p1=&k;p2=&k;则下列语句中不能正确执行是( B )A、k=*P1+*P2;B、p2=k;C、P1=P2;D、K=*P1 * (*P2);P1 P2是指针,K是整型变量,变量怎么可以赋值给指针呢?A其实是执行了K=K+K(P1和P2都指向K,所以*P1 *P2其实都是指K)C是赋值语句D其实执行了K=K*K4.变量的指针,其含义是指该变量的(B)。

A.值 B.地址 C.名 D.一个标志5.若有说明语句:int a, b, c, *d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是(A)。

C语言指针练习题

C语言指针练习题

C语言指针练习题指针练习题1 填空题【1】下面函数要求用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。

int add( int x, int y, ){ =x+y;}【2】若有定义: char ch;(1) 使指针p 可以指向变量ch的定义语句是。

(2) 使指针p指向变量ch的赋值语句是。

(3) 通过指针p给变量ch读入字符的scanf函数调用语句是。

(4) 通过指针p 给变量ch赋字符A的语句是。

(5) 通过指针p输出ch中字符的语句是。

(6) 在16位微机上,指针变量p在内存中所占字节数是,变量ch 在内在所占字节数是。

2 选择题【3】若有说明:int i,j=7,*p=&i则与i=j;等价的语句是()。

A.i=*p;B.*p=*&jC.i=&jD.i=**p;【4】若有定义:int x,*pb;则正确的赋值表达式是()。

A.pb=&xB.pb=xC. *pb=&xD.*pb=*x【5】对于类型相同的指针变量,不能进行的运算是()。

A.< B. = C. + D. –【6】以下程序的输出结果是()。

A.23 B. 24 C. 25 D. 26Void fun ( int *x){ printf(%d\n”,++*x); }main( ){ int a=25;fun (&a);}【7】以下程序的输出结果是()。

A.6 B. 7 C. 8 D. 9main(){int k=2,m=4,n=6;int *pk=&k,*pm=&m,*p;*(p=&n)=*pk*(*pm);printf("%d\n",n);}【8】以下程序的输出结果是()。

A.100 B. 50 C. 101 D.200main(){int *v,b;v=&bb=100;*v+=b;printf("%d\n",b);}【9】以下程序的输出结果是()。

C语言程序设计练习题之 指针与引用

C语言程序设计练习题之 指针与引用
A.p2=p1;B.p2=&p1;C.p2=*p1;D.p2=**p1;
4.设int *p1,*p2,i=1;则p1=&i;p2=p1;表示
A.把i值赋给p2B.p1指向p2
C.p2指向iD.p2指向p1
5.若有int *p1,*p2,m=5,n;下列进行赋值的语句中合理的是
A.p1=m;B.pl=&m;C.*p1=&m;D.&p2=n;
A.(*f1)(a);B.*f1(*s);C.fun(&a);D.ch=*f1(s);
32.已定义以下函数
intfun (int *p)
{return *p;}
该函数的返回值是
A.不确定的值B.形参p中存放的值
C.形参p的地址值D.形参p所指存储单元中的值
33.下列程序运行后的输出结果是
#include <iostream>
char **p;
p=x+1;
cout<<**p;
后输出的结果是
A.wB.iC.oD.d
25.要禁止修改指针p本身,又要禁止修改p所指向的数据,这样的指针应定义为
A.const char *p="ABCD";B.char const *p="ABCD";
C.char *const p="ABCD";D.const char * const p="ABCD";
{
int t;
t=x; x=y; y=t;
}
void fun2(int *x, int *y)
{
int *t;
t=x; x=y; y=t;
}
3.#include <iostream>

指针练习题及答案

指针练习题及答案

指针练习题及答案1. 请编写一个程序,交换两个变量的值,并通过指针来实现。

```c#include<stdio.h>void swap(int *a, int *b){int temp = *a;*a = *b;*b = temp;}int main(){int num1 = 10, num2 = 20;printf("交换前的值:num1=%d, num2=%d\n", num1, num2);swap(&num1, &num2);printf("交换后的值:num1=%d, num2=%d\n", num1, num2);return 0;}```2. 编写一个函数,统计字符串中某个字符出现的次数,并通过指针返回结果。

```c#include<stdio.h>int countChar(const char *str, char target){int count = 0;while(*str != '\0'){if(*str == target)count++;str++;}return count;}int main(){char str[] = "hello world";char target = 'l';int count = countChar(str, target);printf("字符 %c 出现的次数为:%d\n", target, count); return 0;}```3. 编写一个函数,找到整型数组中的最大值,并通过指针返回结果。

```c#include<stdio.h>int findMax(const int *arr, int size){int max = *arr;for(int i = 1; i < size; i++){if(*(arr+i) > max)max = *(arr+i);}return max;}int main(){int arr[] = {10, 20, 30, 40, 50};int size = sizeof(arr) / sizeof(arr[0]);int max = findMax(arr, size);printf("数组中的最大值为:%d\n", max);return 0;}```4. 编写一个函数,将字符串反转,并通过指针返回结果。

课后习题 第七章 指针与引用

课后习题 第七章 指针与引用
int *t,n; n=a;t=&n; return t; } a.一个不可用的存储单元地址值 b.一个可用的存储单元地址值 c.n 中的值 d.形参 a 中的值
一:选择题:
1.A 2.C 3.A 4.D 5.C 6.A 7.C 8.B 9.B 10.A 二:填空题 1、 给出以下程序的输出结果是___________ #include<stdio.h> void main() { int *v,b; v=&b; b=100; *v+=b; printf("%d\n",b); } 2、 说明语句"int (* p)();"的含义是____________ 3、 已知函数说明语句:void *fun();则它的含义是___________ 4、 已知:int i;char *s="a\045+045\'b";执行语句"fot(i=0;*s++;i++);"之后,变量 i 的结果是__________ 5、下面的程序是求两个整数之和,并通过形参传回结果。 int add(intx,int y, ___________z) {_________=x+y;}
} void main() {
char a[50]; cout<<"请输入一字符串:"; cin>>a; char b[30]; cout<<"请输入上字符串的一个子串:"; cin>>b; cout<<strstr_rep(a,b)<<endl; }
2.根据运算符的优先级,表达式*--p=*(--p)。所以,先执行--p 操作,使指针 p 向低地址方向移动 一个存储单元,指向 a[1]。然后用运算符"*"取得该地址所存储的数据,即 20。

指针经典练习题(含答案版)一

指针经典练习题(含答案版)一

指针一.填空题(20分)1. 指针变量是把内存中另一个数据的地址作为其值的变量。

2. 能够直接赋值给指针变量的整数是 0。

3. 如果程序中已有定义:int k;1)定义一个指向变量k的指针变量p的语句是 int* p = &k; 。

2)通过指针变量,将数值6赋值给k的语句是 *p = 6; 。

3)定义一个可以指向指针变量p的变量pp的语句是 int ** pp; 。

4)通过赋值语句将pp指向指针变量p的语句是 pp = &p; 。

5)通过指向指针的变量pp,将k的值增加一倍的语句是 *(*pp)*= 2; 。

4. 当定义某函数时,有一个形参被说明成int *类型,那么可以与之结合的实参类型可以是int型指针、 int型数组等。

4. 以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。

例如,输入的字符串为:556,则输出十进制整数366。

请填空。

45*8#include <stdio.h>main( ){ char *p,s[6]; int n; p=s; gets(p); n=*p-'0';while( *++p != '\0') //先++ ,后*n=n*8+*p-'0';printf("%d \n",n);}二.选择题(22分)1. 以下count函数的功能是统计substr在母串str中出现的次数。

int count(char *str,char *substr){ int i,j,k,num=0;for(i=0; ①B ;i++){for( ②B ,k=0;substr[k]==str[j];k++,j++)if(substr[ ③C ]==’\0’){num++;break;}}return num;}①A) str[i]==substr[i] B) str[i]!=‘\0’C) str[i]==‘\0’ D) str[i]>substr[i]②A) j=i+1 B) j=i C) j=i+10 D) j=1③A) k B) k++ C) k+1 D) ++k2. 以下Delblank函数的功能是删除字符串s中的所有空格(包括Tab、回车符和换行符)。

常指针,常引用,常对象习题答案

常指针,常引用,常对象习题答案

常指针,常引用,常对象习题答案1.C++中有两种数据类型:(char)和(int long)可以使用signed 修饰符。

在C++中,用数组、指针、和(引用)作为函数参数,能够将参数值带回。

2.为了降低函数调用的时间开销,建议将小的调用频繁的函数定义为(内联函数),方法是在函数类型前加上(inline)关键字。

3.面向对象的程序设计有四大特征,它们是抽象、封装、(继承)、(多态)。

4.拷贝构造函数是在用一个对象初始化另一个对象时被调用,系统缺省的拷贝构造函数的工作方法是(把对象的每个数据成员的值都复制到新建立的对象中)。

5.用new申请某一个类的动态对象数组时,在该类中必须能够匹配到(该类的)构造函数,否则应用程序会产生一个编译错误。

6.静态数据成员必须在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象(共享)。

7.在C++中,定义重载函数时,应至少使重载函数的参数个数或参数类型(不同)。

8.在C++中,虽然友元提供了类之间数据进行访问的一种方式,但它破坏了面向对象程序设计的(封装)特性。

9.预编译指令由三种,它们是:文件包含、(宏定义)和(条件编译)。

10.静态的成员函数没有隐含的(this),所以,它们只能直接访问类的静态的数据成员。

11.在C++中,函数的参数有两种传递方式,它们是值传递和(地址)。

12.当非静态成员函数被调用时,该成员函数的(this)指向调用它的对象。

13.拷贝构造函数使用(引用)作为参数初始化创建中的对象。

14.在公有继承的情况下,基类数据成员在派生类中的访问权限(不变)。

15.在C++中,构造派生类对象时,总是先从(基类)的初始化开始的。

16.当需要统计程序中某个类创建对象的个数时,需要给该类定义(静态数据)成员。

17.在多个类之间有重复继承时,为避免被重复继承的基类数据成员在内存中有多个拷贝,应将该基类定义为(虚基类)。

18.在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为(抽象类),定义该类至少具有一个(纯虚函数)。

第8-9 章练习 指针与引用

第8-9 章练习 指针与引用

一、选择题1、若有以下定义,则说法错误的是( )。

int a=100,*p=&a ;A .声明变量p ,其中*表示p 是一个指针变量B .变量p 经初始化,获得变量a 的地址C .变量p 只可以指向一个整形变量D .变量p 的值为1002、若有以下定义,则赋值正确的是( )。

int a ,b , *p;float c, *q;A .p=&cB .q=pC .p=NULLD .q=new int3、如果x 是整型变量,则合法的形式是( )。

A .&(x+5)B .*xC .&*xD .*&x4、若要建立如下关系,错误的语句组是( )。

A .B . 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;5、若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a ;则( )不是对a 数组元素的正确引用(其中0≤i <10)。

A .p[i]B .*(*(a+i))C .a[p-a]D .*(&a[i])6、若有以下定义,则变量p 所占内存空间的字节数是( )。

float *p;A.1B.2C.4D.87、 若有以下定义,则赋值错误的是( )。

int a,*p,*q;A. *p=&a ;B.p=new int ;C.q=NULL;D.p=q8、下列程序运行结果是( )。

#include<iostream.h>void main(){int a=10,*q;if(q==NULL)cout<<"####"<<endl;elseq=&a;cout<<*q<<endl;}A. ####B.10C. 有语法错误D.*q9、若程序段static char line[]=”Visual C++”; char *point=line; 则point 的值为( )。

2012C++ 课堂练习2 指针、引用、数组

2012C++ 课堂练习2 指针、引用、数组

C++ 课堂练习2 指针、引用、数组指针知识点1.掌握指针、地址、指针类型等概念;2.掌握指针变量的定义和初始化、指针的间接访问、指针的加减运算;3.掌握指针与数组的联系;4.掌握引用参数的使用。

5. 数组的初始化,数组与函数6. 数组中的元素典型例题分析与解答1、若有以下定义,则说法错误的是( )。

int a=100,*p=&a ;A.声明变量p,其中*表示p是一个指针变量B.变量p经初始化,获得变量a的地址C.变量p只可以指向一个整形变量D.变量p的值为1002、写出下列程序运行结果:#include<iostream>using namespace std;int main(){int *pn, n=10,m=20;pn=&n;*pn+=m;cout<<"n 现在的值是:"<<n<<endl;}3、在int a=20,int *p=&a;中,*p的值是()A. 变量a的地址值B. 无意义C. 变量p的地址值D. 204、改错#include <iostream.h>void main(){int i,*p;i=10;*p=i;cout<<*p<<endl;}5、改错#include <iostream.h>void main(){int i, &a;i=10;cout<<a<<endl;}6、函数参数地址传递以下程序的输出结果是( )。

#include <iostream>using namespace std;void fun(int x,int y,int *cp,int &dp){*cp=x+y; //*cp=30+50=80dp=x-y; //dp=30-50=-20}void main(){int a,b,c,d;a=30,b=50;fun(a,b,&c,d);cout<<c<<","<<d<<endl;}A.50,30 B.30,50 C.80,-20 D.80,207、假定一个二维数组的定义语句为“int a[6] ={1,6,7,8};”,则元素a[0]的值为(),a[3]是多少( ) a[4]是多少( )8、假定一个二维数组的定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值为()。

  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;
相关文档
最新文档