二维数组指针表示

//关于二维数组,二级指针的使用.
#include<stdlib.h>
#include<iostream>
using namespace std;
int main()
{
int (*a)[5],i;
int b[5]={1,3,5,7,9};
int c[3][5];
a=c;
*a=b;//问题所在,在C-Free中编译通过. 而在Dev-C++中不允许这样操作.
for (i=0;i<5;i++)
cout<<i<<" "<<c[0][i]<<endl;
system("pause");
return 1;
}
//如何通过指针将数组b赋给二维数组的第一行. 要怎样才能符合标准的C++操作呢?
//错误信息:行10 error: ISO C++ forbids assignment of arrays.
//Borland c++3.1编译信息:Lvalue required.
楼下的回答仅是取得了多维数组的行地址,但并没有通过指针实现将已知一维数组赋给一个多维数组的某行.

首先我觉得这样使用是不安全的。
也许会导致你开始给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没有区别。

——————————————————————————————

汗。行的地址知道了,可以改了,不就等于你能把其它行的地址赋值给这个地址?一维数组的标识其实只靠行头的那个地址。也就是说一位数组你在用的时候只用那个行头的指针啊。

把这个指针赋值给你的二维数组的行指针,不就是意味着你的二维数组的指定行就是那个一维数组?

参考资料:http://zhidao.baidu.com/question/82055937.html

温馨提示:答案为网友推荐,仅供参考