我有一个 char[][]
char c[2][2]={
{'a','b'},
{'c','d'}
};
如何将其转换为char**
?
此处的目的是将转换后的内容char**
用作主要功能的输入,该功能仅接受char**
其输入。两种C / C ++解决方案都是可以接受的。
虽然您可以轻松地从切换char[]
到char*
,但是使用char[][]
和则无法实现char**
:
char[2][2]
是一个二维数组,其中所有元素都连续存储。要访问一个元素,编译器会知道每一行的大小来计算偏移量。char**
指向包含指向char的指针的数组。要访问一个元素,编译器将计算指针在最左侧的偏移量,加载该Poitner,然后访问该元素。解决方法:
char *pc[2]={c[0],c[1]};
cout << pc[1][1]<<endl; // prints out the same as c[1][1]
// you can pass `pc` when a `char**` is needed
备注:可以完美编译。但是,某些带有参数的函数(例如char **av
Expect)实际上av[i]
是一个以null结尾的c字符串。在这种情况下,尽管您的代码可以编译,但结果可能不是您期望的(缓冲区溢出)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句