c语言动态二维指针数组

请问各位,
如果我想要生成一个元素为(char*)指针的二维动态数组,
应该怎样生成?
谢谢

样的使用也是错误的。

指向指针的指针,意思就是说这个指针必须指向一个指针类型的地址,因为指针是一个变量,因此指针也有自已的地址。比如int **p, *p1; int n=4; 那么正确的语法应该是p1=&n; p=&p1; 注意第二句,应该把指针p1的地址赋给p,你可以看到p1的地址&p1与p1的值p1是不相同的,p1的值等于的是n的地址,而&p1的地址是指针变量的地址。

int **p; 赋值就省了,我们来看p[0]表示的是什么,在C中[]数组运算符的功用是把指针所指向的地址偏移[]括号内的数值,然后再求值(也就是使用指针运算符),因此p[0]表示的是就是*(p+0);而p[1]也就是*(p+1); 而p是一个指向指针的指针,因此p的值也就是上面列举的p1的地址,你使用p1的地址再加上1,那么得到的结果是什么?这是不可预料的,因此使用p[]这样的语法会出问题。

对于**p中p与*p的区别,上面已讲了p的值就是p1的地址,而*p也就是p1的地址的值,也就是p1所指向的地址,就是变量n的地址,因此p1的地址与p1的值是不可能相同的,因此p与*p不可能相等,这不是二维数组

对于二维数组a[][]来讲a和*a是相等的,a指向的地址是&a[0],而*a就是指的a[0],二维数组a[0]指向的地址是&a[0][0],在二维数组中这几个值是相等的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-20
维地址,指向二维数组第0行地址(0开始计数)第1列(0开始计数)。
【】优先级>()。所以表达式实际是:
*(p-1)乘以*(p+1+1)
p指向值为“2”的指针,p-1指向1的指针,则*(p-1)=1;
*(p+1+1)实际指向了a数组最后一个值,最后一个值未初始化默认为0。
则两者相乘为0。
第2个回答  2011-04-19
对你的问题有点不懂,你是想说元素都是char型变量,如果是,可以这么做
char *array=new char[m*n];
m和n的值都可以随意改变
不知道是不是你想要的追问

我指的是元素是指針

追答

int 型正好是32位,指针都是32位的,你弄个int型数组负责存放指针地址不就ok,

本回答被网友采纳
第3个回答  2011-04-20
动态数组什么意思,你指用new 生成的动态生成的,还是可以动态增加元素的动态数组。
若是后者的话可以使用 容器追问

我指的是用malloc的數組
事前不知道要放多少個元素

追答

你意思应该是这样的吧:char**p=new char *[10];

第4个回答  2011-04-20
char *array[]=new m*n*sizeof(char *);追问

如果我事前不知道m,n怎麼辦呢?

追答

可以输入,也可以将对象纳入sizeof里面

相似回答