C语言指针练习题解析 下载本文

}

A. #### B.10 C. 有语法错误 D.*q

(4)若程序段static char line[]=”Visual C++”; char *point=line; 则point的值为( )。

A. ”Visual C++” B. line的首地址 C. Visual D. \\0

(5) 相同数据类型的数组名和指针变量均表示地址,以下不正确的说法是( )。

A. 数组名代表的地址不变,指针变量存放的地址可变。

B. 数组名代表的存储空间不变,指针变量指向的存储空间长度可变。 C. A和B的说法均正确。 D. 没有差别。

(6) 若有以下定义,则下列操作错误的是( )。

int a[5]={1,3,5,7,9},*p=new int [5];

A.p=a; B.*p=a; C.*(p+1)=a[1]; D.*p=*a

(7) 若有以下定义,则释放指针所指内存空间的操作是( )。 int *p=new int [10];

A.delete []r; B.delete *r C.delete r; delete r[]

(8) 若有以下定义,下列值为6的表示式是( )。 int a[3][5]={{1,2},{2,4,6,8},{10,20,30,40,50}};

A.*(a+2)+3 B.a[2][3] C.*(*(a+1)+2) D.*(*(a+2)+3)

(9)若int (*p)[5];,则下列正确的叙述是( )。 A. 是指针数组

B. (*p)[5]与*p[5]等价

C. p的指针,它可指向一维数组中任一元素

D. p是指针,它只能指向一个包含5个int类型元素的一维数组

(10)执行下列程序段后,字符串str1的值是( )。 char str1[8] ,*str2[]=”AA\\0BB”;

strcpy(str1,str2);

A. AA\\0BB B. AA BB C. AA D.AA\\0BB\\0

2.写出下列程序运行结果: (1)#include

void main() { int x=100,y=200; int *p=&x; (*p)++; p=&y; *p=x;

cout<

} (2) #include void main()

{ int a[]={10,20,30,40,50,60,70,80,90,100}; int i,*p,sum=0; p=a;

for(i=1;i<10;i=i+2) sum+=p[i];

cout<<\

} (3) #include

void main()

{ float b[][4]={1.0,2.0,1.2,3.0,4.0,3.1,1.6,1.7,1.8,1.9,2.0,2.1}; float *p,sum=1.0; int i; p=&b[0][1]; for(i=0;i<3;i++)

{ sum=sum*(*(p+i));

cout<<\

} (4) #include void main()

{char *b[]={\ char *p; p=b[2];

cout<<*p<<'\\t'<<*b<

}

(5) #include

void main()

{int i,a[]={10,20,30,40},*p[4],**q; for(i=0;i<4;i++)

p[i]=a+i;

q=p;

cout<<**++q< cout<<*++*q< cout<<++**q< cout<<*q-a<

} (6) #include #include #define N 5 void main()

{char* course[]={\

\

int i,j,k; char *temp;

for(i=0;i {k=i;

for(j=i+1;j

if(strcmp(course[k],course[j])>0) k=j; if(k!=i) {temp=course[i];

course[i]=course[k]; course[k]=temp; } }

for(i=0;i cout< }