用指针表示二维数组?

比如a[0][1],首先表示a[0]是*(a+0),那这样不是表示这个变量吗 那a[0]+1表示的是什么,a[0]又变成地址了,为什么?

第1个回答  2020-06-08
首先我觉得这样使用是不安全的。
也许会导致你开始给a*声明的int[5]无法析构。
我试了下在vc05
int
(*a)[5],i;
int
b[5]={1,3,5,7,9};
int
c[3][5];
a=b;
这是不被允许的。
如果你是要开一个指针的指针的话,这样做
int
b[5]={1,3,5,7,9};
int
c[3][5];
int*
a[4];//a现在是一个int[]的指针
a[0]=b;//a[0]和b一样为int*
int
**q=a+1;//q的位置其实是a[1],就像a的位置就是a[0]
*(int**)q=*(int**)(c);//类型强制转换,保证指针赋值
这样下来结果应该是这样的,a[0]为b[]指针,a[1]至a[4]分别是c[0][]到c[3][]指针。
希望有所帮助。
说实在的指针就是一个32位整形变量,只能指向内存中唯一一个地址。光从存储来说任意一个指针应该都和unsigned
long没有区别。
——————————————————————————————
汗。行的地址知道了,可以改了,不就等于你能把其它行的地址赋值给这个地址?一维数组的标识其实只靠行头的那个地址。也就是说一位数组你在用的时候只用那个行头的指针啊。
把这个指针赋值给你的二维数组的行指针,不就是意味着你的二维数组的指定行就是那个一维数组?
第2个回答  2020-05-31
a[0]和*(a+0)是第0行元素的首地址。
a[0]+1是第0行第1列元素的地址。
a[0][1]表示第0行第1列元素的值。本回答被网友采纳