C语言指针练习题解析Word下载.docx

上传人:b****6 文档编号:16076252 上传时间:2022-11-18 格式:DOCX 页数:19 大小:26.75KB
下载 相关 举报
C语言指针练习题解析Word下载.docx_第1页
第1页 / 共19页
C语言指针练习题解析Word下载.docx_第2页
第2页 / 共19页
C语言指针练习题解析Word下载.docx_第3页
第3页 / 共19页
C语言指针练习题解析Word下载.docx_第4页
第4页 / 共19页
C语言指针练习题解析Word下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

C语言指针练习题解析Word下载.docx

《C语言指针练习题解析Word下载.docx》由会员分享,可在线阅读,更多相关《C语言指针练习题解析Word下载.docx(19页珍藏版)》请在冰豆网上搜索。

C语言指针练习题解析Word下载.docx

inta,b,*p;

floatc,*q;

A.p=&

cB.q=pC.p=NULLD.q=newint

C

指针变量使用规定,不同类型的指针变量不能赋值,也不能取得普通变量地址,故A、B不正确,不能选择。

因为q是float类型指针变量,不能申请int类型地址,D不正确,也不能选择。

因为任何类型的指针变量都能取得NULL指针,所以C正确。

例题3:

如果x是整型变量,则合法的形式是()。

A.&(x+5)B.*x   C.&

*x   D.*&

x

因为C++语言表达式没有地址,A不正确。

C++语言普通变量不能用*运算,因此B和C也不正确。

&

x表示变量x的地址,*&

x是x地址的值,所以D正确。

例题4:

若要建立如下关系,错误的语句组是()。

spanstyle='

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;

intx,p=&

x;

int*p,x=10;

int*p,x;

*p=10;

*p=&

p=&

x;

x=10;

A

在变量类型说明语句中*表示变量是指针变量,在其他语句中,*称为指针运算,用于访问指针所指向的对象的值,&

称为取地址运算,用来得到一个对象的地址。

故B、C、D都是正确的,不能选择。

A中指针变量p取不到x地址,因为x还没有定义,所以选择A。

例题5:

若有语句inta[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])

B

指针就变量p取得数组a的首地址,由指针与数组关系知,p[i]表示数组元素第i+1元素值,p[i]=a[i]正确,故A不能选。

*(a+i)表示一维数组a第i+1元素值,*(*(a+i)表示对第i+1元素值再取值是错误操作,所以选B。

a[p-a]=a[0]正确,故不能选择C。

*(&

a[i])也正确(见上题),也不能选D。

例题6:

写出下列程序运行结果是()。

#include

voidmain()

{

charch[3][4]={“AAA”,”BB”,”CCC”},(*q)[4]=ch,*p;

//ch是二维数组,q是指向一维数组指针,并且一维数组每行只有4个字符

//q并取得二维数组ch首地址

inti;

p=newchar;

//申请地址

*p=’b’;

//装入字符b

*(*q+3)=*p;

for(i=0;

i<

3;

i++)cout<

<

Q[I]<

ENDL;

SPAN>

}

A.B.C.D.

AAAbBBAAAbAAAAAA

BBBBbBBBB

CCCCCCCCCCCC

二维字符数组初始化后值如下表:

1

2

3

\0

执行语句*(*q+3)=*p后二维字符数组值:

b

在输出语句中q[0]输出是AAAbBB,q[1]输出是BB,q[2]输出CCC,只能选择A。

例题7:

写出下列程序运行结果:

#include

voidmain()

{int*pn,n=10,m=20;

float*pf,px=3.14159,py=2.71828;

pn=&

n;

*pn+=m;

cout<

”n现在的值是:

”<

*pn<

pf=&

px;

py+=5*(*pf);

”py现在的值是:

”<

PY<

运行结果是:

n现在的值是:

30

pf现在的值是:

18.4262

指针是通过在变量前加一个“*”来定义,使用用“*”加变量名存取指针所指的值,用运算“&

”取变量的地址,但是不能存取无指向的指针所指向内容,这样会导致系统故障。

例题8:

{intI,*p,a[]={10,20,30,40,50,60};

p=a;

for(I=0;

I<

5;

I++)

”a[“<

A[I]<

’\T’<

”*(A+”<

*(A+I)<

’\t’<

”*(p+”<

*(P+I)<

”P[“<

P[I]<

运行结果:

a[0]=10*(a+0)=10*(p+0)=10p[0]=10

a[1]=20*(a+1)=20*(p+1)=20p[1]=20

a[2]=30*(a+2)=30*(p+2)=30p[2]=30

a[3]=40*(a+3)=40*(p+3)=40p[3]=40

a[4]=50*(a+4)=50*(p+4)=50p[4]=50

a[5]=60*(a+5)=60*(p+5)=60p[5]=60

分析程序根据指针与数组关系,引用数据可以有四种不同的表示方法:

使用数组下标变量;

使用数据固有的指针——数组名间接引用;

使用指向数组的指针的间接引用;

使用指向数组的指针下标引用。

例题9:

指出下列程序运行结果:

intb[4][4]={{10,11,12,13},{14,15,16,17},{18,19,20,21},{22,23,24,25}};

{int(*a)[4],*p;

a=b;

//指针变量a,取得二维数组第一行地址

p=a[1];

//指针变量p,取得二维数组第二行第一列地址

for(intI=1;

=4;

p=p+1,I++)//A行

*p<

'

\t'

;

cout<

for(I=0;

=3;

I++)//B行

{cout<

*(*a+1)<

a++;

}//C行

14151617

11151923

根据题意,指针变量p取得二维数组第二行第一列地址,进行循环语句后,每循环一次,指针变量下移一个元素,A行循环输出是14,15,16,17。

指向一维数组指针a,取得二维数组第一行地址,由指向一维数组指针定义,*a+1表示该行第一列元素地址,*(*a+1)表示该地址的值,所以B行输出是11,15,19,23。

例题10:

voidfun(int*&

a,int&

m)

{a=newint[m];

//A

int*p=a;

for(inti=0;

M;

I++)<

*p++=i*i+1;

}

voidmain()

{int*b,n=5;

fun(b,n);

N;

cout<

B[I]<

SPAN?

>

delete[]b;

//B

1251017

指针变量在函数main中没有取得地址,所以在A行中,对被调用函数fun给对应的形参指针变量申请地址,即指针变量b和形参指针变量p指向同一组地址。

B行对申请地址释放。

例题11:

下列函数change的功能是,将字符串中的小写字母转成大写字母,请填空。

voidchange()//1

{inti=0;

for(i=0;

;

i++)//2

if(a[i]>

='

a'

a[i]<

z'

;

//3

{charp[80];

"

\n"

cin.getline(p,80);

//读一行字符,中间可以有空格

change(p);

P<

如程序运行时得到以下结果:

请输入一行字符:

Thisisabook..

THISISABOOK.

(1)char*a或chara[80]

(2)a[i]或a[i]!

=’\0’

(3)a[i]=a[i]–32或a[i]-=a[i]

(1) 

由指针和字符串关系知:

当实参是数组,形参可以是字符串变量,也可以是字符指针变量。

(2) 

循环语句结束条件是字符标记’\0’。

(3) 

大写字母的ASCII码比小室字母的ASCII码小32。

例题12:

下列函数swap实现数据交换功能功能,请填空。

voids*p,int*q)

{inttemp;

temp=*p;

//1

//2

{inta,b;

int*p1,*p2;

请输入两个正数:

cin>

a>

b;

p1=&

a;

p2=&

s);

结果a和b的值:

A<

"

B<

1020

20,10

(1) 

*p=*q

(2) 

*q=temp;

实参和形参都是指针变量,所以指针变量p1和p指向同一个地址,同样p2和q也指向同一个地址。

函数swap()是交换两个数,故应填写语句*p=*q、*q=temp。

例题13:

下列函数sort实现对字符串按字典顺序由小到大排序,请填空。

voidsort()//1

{char;

inti,j;

N-1;

for(j=0;

j<

N-1-I;

J++)<

if(strc

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 少儿英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1