第4章指针和引用
时间:2025-04-05
时间:2025-04-05
第4章 指针和引用
练习题4
4.1 判断题
× 1.指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址值,这两个地址值是相等的。
√ 2.指针的类型是它所指向的变量或对象的类型。
× 3.定义指针时不可以赋初值。
√ 4.指针可以赋值,给指针赋值时一定要类型相同,级别一致。
× 5.指针可以加上或减去一个int型数,也可以加上一个指针。
√ 6.两个指针在任何情况下相减都是有意义的。
√ 7.数组元素可以用下标表示,也可以用指针表示。
× 8.指向数组元素的指针只可指向数组的首元素。
√ 9.指向一维数组的指针是一个二级指针。
× 10.指针数组的元素可以是不同类型的指针。
√ 11.字符指针是指向字符串的指针,可以用字符串常量给字符指针赋值。 × 12.引用是一种变量,它也有值和地址值。
√ 13.引用是某个变量的别名,引用是被绑定在被引用的变量上。
√ 14.创建引用时要用一个同类型的变量进行初始化。
√ 15.指针是变量,它可以有引用,而引用不能有引用。
4.2 单选题
1.下列关于定义一个指向double型变量的指针,正确的是( B )。
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 )。
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.下列关于指针概念的描述中,错误的是( B )。
A.指针中存放的是某变量或对象的地址值
B.指针的类型是它所存放的数值的类型
C.指针是变量,它也具有一个内存地址值
D.指针的值(非常量指针)是可以改变的
4.下列关于引用概念的描述中,错误的是( A )。
A.引用是变量,它具有值和地址值
B.引用不可以作数组元素
C.引用是变量的别名
D.创建引用时必须进行初始化
5.已知:int a[5],*p=a;则与++*p相同的是( D )。
A.*++p B.a[0]
C.*p++ D.++a[0]
6.已知:int a[ ]={1,2,3,4,5},*p=a;在下列数组元素地址的表示中,正确的是(C )。
A.&(a+1) B.&(p+1)
C.&p[2] D.*p++
7.已知:int a[3][4],(*p)[4];下列赋值表达式中,正确的是( A )。
A.p=a+2 B.p=a[1]
C.p=*a D.p=*a+2
8.已知:int b[3][5]={0};下列数组元素值的表示中,错误的是( D )。
A.**(b+1) B.(*(b+1))[2]
C.*(*(b+1)+1) D.*(b+2)
9.已知:int a=1,b=2,*p[2];下列表达式中正确的是( C )。
A.p=&a B.p=&b
C.p[0]=&a,p[1]=&b D.p[ ]={&a,&b};
10.已知:int a(5),&ra=a;下列描述中,错误的是( D )。
A.ra是变量a的引用,即为变量的别名 B.ra的值为5
C.ra的地址值为&a D.改变ra的值为10,变量a值仍为5
4.3 填空题
1.单目运算符&作用在变量名左边,表示该变量的 地址值 ,单目运算符*作用在指针名的左边,表示取该变量的 值 。
2.指向一维数组元素的指针是级指针,指向二维数组元素的指针是级指针,指向一维数组的指针是 二 级指针,指向一级指针的指针是 二 级指针,一维一级指针数组名是 二 级指针的地址值,二维数组的数组名是 二 级指针的地址值。
3.在一个二维数组b[3][5]中,b[0]与&b[1]与是等价的。
4.指针的运算有4种,它们是运算、一个指针加减整型数的运算、两个指针相减和 比较 运算。
5.引用不是变量,它是某个变量或对象的引用的值是,引用的地址值是 被引用的变量的地址值 。
4.4 分析下列程序的输出结果
1.
#include <iostream.h>
void main()
{
int a[]={5,4,3,2,1};
int *p=&a[2];
int m(5),n;
for(int i(2);i>=0;i--)
{
}
答: 1
2
3
n=(*(p+i)<*a)?*(p+i):*a; cout<<n<<endl; }
2.
#include <iostream.h>
void main()
{
char *p1,*p2;
p1="abcqrv";
p2="abcpqo";
while(*p1&&*p2&&*p2++==*p1++)
;
int n=*(p1-1)-*(p2-1);
cout<<n<<endl;
}
答: 1
3.
#include <iostream.h>
int a[]={10,9,6,5,4,2,1};
void main()
{
int n(7),i(7),x(7);
while(x>*(a+i))
{
*(a+i+1)=*(a+i);
i--;
}
*(a+i+1)=x;
for(i=0;i<n;i++)
cout<<*(a+i)<<',';
cout<<a[i]<<endl;
}
答: 10,9,7,6,5,4,2,1
4.
#include <iostream.h>
int a[][3]={1,2,3,4,5,6,7,8,9};
int *p[]={a[0],a[1],a[2]};
int **pp=p;
void main()
{
int (*s)[3]=a;
for(int i(1);i<3;i++)
for(int j(0);j<2;j++)
}
答: 4,4,4,4
5,5,5,5
7,7,7,7 cout<<*(a[i]+j)<<','<<*(*(p+i)+j)<<',' <<(*(pp+i))[j]<<','<<*(*s+3*i+j)<<endl;
8,8,8,8
5.
#include <iostream.h>
int a[]={1,2,3,4,5,6,7,8,9};
void main()
{
int *pa=a;
cout<<*pa<<', …… 此处隐藏:3117字,全部文档内容请下载后查看。喜欢就下载吧 ……
上一篇:酸碱中和滴定实验误差分析
下一篇:路基工程监理实施细则