C语言数组和for语句

来源:百度知道 编辑:UC知道 时间:2024/06/08 13:02:56
若有以下的说明和语句,则在执行for语句后,*(*(pt+1)+2)表示的数组元素是()
int t[3][3],*pt[3],k;
for(k=0;k<3;k++)pt[k]=&t[k][0];
A.t[2][0] B.t[2][2] C.[1][2] D.t[2][1]

不明白是怎么回事。

c.t[1][2]
pt是指针数组,
pt[0]里保存的是t[0][0]的地址
pt[1]是t[1][0]的地址
pt[2]是t[2][0]的地址
由于数组地址是连续的。当pt+1时,实际就是等于pt[1],前面加*表示取里面的数据,因为是指针数组里面保存的是t[1][0]的地址,再加2实际是在t[1][0]的地址基础上加2那么地址现在就是t[1][2]的地址。

这里主要考的就是数组的物理存储结构,一维数组各元素是顺序存储在某一空间,地址在物理上是连续的。二维数组是以行顺序存储即在存储时先按行顺序从上到下,每行中从左到右,一行一行顺序分配地址分配地址。
例数组a[3][3]
0------------------>2
3------------------>5
6------------------>8

pt是一个指针数组,for语句执行完后,pt的各元素分别指向其对应k列的首地址。故*(pt+1)指向t[1][],*(pt+1)+2指向t[1][2]。
*(*(pt+1)+2)则表示t[1][2]。

数组pt里的元素pt[0]存储的是每一行第一个元素的地址,*(pt+1)的值就是pt[1],往下移两个单位,取值就是t[1][2]