标准C语言08_01
选择题
以下程序: B
#include
void main( ){
int aa[3][3]={{2},{4},{6}}, i,*p=&aa[0][0];
//if是数组指针int (*p)
//*p存的是一位数组,就是二维数组的第一行
for(i=0;i<2;i++){
if(i ==0) aa[i][i+1]=*p+1; //*p=2; aa[0][1]=3;
else ++p; //列地址加一为aa[0][1]
printf("%d",* p);
}
printf("\n");
}
其输出结果是
A)23 B)26 C)33 D)36
若有定义语句:int(*p)[M]; ,其中的标识符p是 A
A)M个指向整型变量的指针
B)指向M个整型变量的函数指针
C)一个行指针,它指向具有M个整型元素的一维数组
D)具有M个指针元素的一维指针数组,每个元素都只能指向整型量
若有定义:int a[3][4];不能表示数组元素a[1][1]的是__D_____。
A)*(a[1]+1) B)*(&a[1][1])
C)(*(a+1)[1]) D)*(a+5)//行地址超了
若有以下定义和语句:
int s[4][5],(*ps)[5];
ps=s;
则对s数组元素的正确引用形式是 C 。
A)ps+1 B) *(ps+3) C) ps[0][2] D)* (ps+1)+3
若有定义:int a[2][3];则对a数组的第i行第j列元素值得正确引用为( A )
A、*(*(a+i)+j) B、(a+i)[j] C、*(a+i+j) D、*(a+i)+j
若有以下定义和语句,则对a数组元素地址的正确引用为( D )
int a[2][3],(*p)[3]; p=a;
A、*(p+2) B、p[2] C、p[1]+1 D、(p+1)+2
若有定义和语句:
int c[4][5], (*cp)[5]; cp=c;
则对c数组元素的引用正确的是( D )
A、 cp+1 B、*(cp+3) C、*(cp+1)+3 D、*(*cp+2)
以下与int *q[5];等价的定义语句是( C )
A、int q[5]; B、int *q; C、int *(q[5]) D、int (*q)[5]
若有定义int a[]={2,4,6,8,10,12,14,16,18,20,22,24},*q[4],k;则下面程序段出是 指针数组*q[4]//存的是地址
数组指针(*q)[4]//存的是二维数组中首行地址;
for(k=0;k<4;k++) q[k]=&a[k*3];//q[k]存的是a[k*3]的地址
q[4]={&a[0], &a[3], &a[6], &a[9]}
printf(“%d\n”,q[3][0]);
*q[3]====== q[3][0]
A、8 B、16 C、20 D、输出项不合法,结果不确定
下面程序的输出结果是( D )。
int a[2][3]={1,2,3,4,5,6},*p[2],i;//指针数组保存地址
for (i=0;i<2;++i) *(p+i)=a[i];//首行地址
for (i=0;i<3;i++) printf("%d",*(*(p+1)+i));
A)编译出错,无法运行 B)3 4 5
C)2 3 4 D)4 5 6
若已定义:
int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},(*prt)[3]=a,*p=a[0];
(*prt)[3]//数组指针,保存二维的首行
*p=a[0]; //指针数组,保存一维地址则能够正确表示数组元素a[1][2]的表达式是( B )A、 *((*prt+1)[2]) B、*(*(p+5)) C、(*prt+1)+2 D、*(*(a+1)+2)
如下程序的输出结果