我用MinGW编译了你的程序,结果是:
*( ( int *)p) = 33
*q = 22
程序代码:
#include "iostream.h"
int main()
{
int a[3][4]={6,29,22,12,5,18,21,36,33,19,66,32}; /*定义一个3 * 4的二维数组*/
int i,j=0,(*p)[4]=a,*q=a[0]; /*定义一个指向一个长度为4的数组的指针p,定义一个指针q,指向a数组的首地址*/
for( i = 0; i < 3; i++)
{
if( i == 1)
{
(*p)[i+i/2]=*q+1;
}
else
{
p++;
++q;
}
}
cout<<"a[i][j]\n";
for(i=0;i<3;i++)
{
for ( j = 0; j < 4; j++)
{
cout << a[i][j] <<" ";
}
cout << endl;
}
cout<<endl;
cout<<"*((int *)p)="<<*((int *)p)<<"* q="<<*q<<endl;
return 0;
}
/*
i = 0时, p++ >>> p此时为a[1]的地址,++q >>> q此时为a[0][1]的地址. a[3][4]={6,29,22,12, 5,18,21,36, 33,19,66,32}
i = 1时, (*p)[i+i/2] >>> p为a[1][1]的地址, 把a[0][1]赋值给a[1][1]. a[3][4]={6,29,22,12, 5,30,21,36, 33,19,66,32}
i = 2时, p++ >>> p此时指向a[2][1]的地址, ++q >>> q此时为a[0][2]的地址.
故p = 33, q = 22
*/
这样用指针容易迷糊的。
图片附件: 游客没有浏览图片的权限,请
登录 或
注册
[
本帖最后由 zhoufeng1988 于 2010-12-2 16:10 编辑 ]