c++中怎么将一个二维的字符数组放入栈中

c++中如何将一个二维的字符数组放入栈中?
问题如题,栈是STL的栈,是
stack<char**> q;
吗?我并不想往stack中放数组的指针,而是一个真实的二维数组,求例子。
C++ 二维数组

------解决方案--------------------
	char *a="123456";
stack<char **>sTemp;
sTemp.push(&a);
char **b=sTemp.top();

------解决方案--------------------
你的二维数组是固定行列数的吗?如果行列数不一致,不能直接放到一个stack中,因为它们不是同一种类型。

如果行数不一样而列数一样,只能存放char(*)[列数]。
如果列数不一样,只能存放char**,并且数组用循环为每一行分配内存。

如果行列数确定,可以定义一个结构体来代替数组:

struct charary_10_20
{
   char data[10][20];
};
stack<charary_10_20> q;

之所以这样做是因为C数组是不允许赋值的,但结构可以赋值。
------解决方案--------------------
二维数组和指针的指针是有区别的
------解决方案--------------------
C++11的标准库中有array类模板来代替定长数组。不用C++11的话,boost库也提供了这一模板。


typedef array<array<char, 20>, 10> charary_10_20;//注意声明时列数在前行数在后,但访问时还是先行后列:ary[行号][列号]
stack<charary_10_20> q;


一点题外话:boost库以及新标准都把array中长度参数定义为第二个参数,虽然在定义一维数组时更符合我们通常的习惯,但定义多维数组时每维的长度却是倒过来的,很别扭。其实我在自己写这个模板时都是把长度定义为第一个参数:

  my::array<10, int> my_int_10;//相当于int[10]
  std::array<int, 10> std_int_10;//相当于int[10]

  my::array<10, my::array<20, int> > my_int_10_20;//相当于int[10][20];
  std::array<std::array<int, 20>, 10> my_int_10_20;//相当于int[10][20];

  虽然类型在后面有些奇怪,但每维长度的定义是正序,不容易看错。类型在后的问题,可以用pascal语法去理解(只是示意,没有完全用Pascal的“下界..上界”的语法):
my::array<10, int> ==> array[10] of integer;
my::array<10, my::array<20, int> > ==> array[10][20] of integer;
------解决方案--------------------
stack<vector<vector<char>>> q;

------解决方案--------------------
先把指针和数组这一块基础再深入理解一下: