若有以下定义,且0<=i<4,则不正确的赋值语句是 int b[4][6],*p,*q[4]; A q[i]=b[i]; B p=b; C p=b[i]; D q[i]=&b[0][0];

来源:互联网 发布:最后的幸存者小说知临 编辑:程序博客网 时间:2024/05/24 05:40
若有以下定义,且0<=i<4,则不正确的赋值语句是 int b[4][6],*p,*q[4];

A q[i]=b[i];  B p=b;  C p=b[i];  D q[i]=&b[0][0];

 答案为B

解析:

A:q是一个指针数组,本质是一个一维数组,b[i]相当于将二维数组拆开成一个一位数组,每个元素还是包含多个元素的一位数组,本质一样,所以可以赋值。

B:p是一个int型指针,而b是一个二维数组名,某些环境运行不会出错,但严谨意义上是不允许的,b,b[0],&b[0][0],结果都是b[0][0]的地址,但是三个方式的类型不完全相同,b是int(*)[]型,b[0]是int *型,&b[0][0]是int*型,而指针p是int *型,所以p=b犯了类型不同的错误。

C:理由同B,p和b[i]类型相同,所以可以赋值。

D:q是一个指针数组,每个元素也是一个指针,q[i]里边存放某个数据的地址,而&b[0][0]是b[0][0]的地址,所以可以赋值。

1 0