如何获取多维静态数组的地址? 例如,这是我的数组获取多维静态数组的地址
char array[2][10] = {"word1", "word2"};
是否有可能得到的地址,让我参考使用这样的指针数组?我试过&数组或直接指针=(char **)数组;但在启动时崩溃。
如何获取多维静态数组的地址? 例如,这是我的数组获取多维静态数组的地址
char array[2][10] = {"word1", "word2"};
是否有可能得到的地址,让我参考使用这样的指针数组?我试过&数组或直接指针=(char **)数组;但在启动时崩溃。
char **pointer
表示指针指向指针。 所以*pointer
预计是一个指针(例如,可以解释为地址的4字节值)。
数组并非如此:它是内存中的一个连续区域(20个字节)。
因此,当您尝试将数组转换为char **
时,您的应用程序将崩溃。 这是不可能做这种转换,char **
必须指向一个指针。
Peter Peter Der Linden对“Expert C Programming”的评价,他解释了我认为我已经知道的很多东西。 – 2011-05-31 21:41:36
Right ...“array”可以被看作是一个简单的char *指针,被编译器视为一个“有界”的矩阵。因此,我会错误地将这个数组赋值给一个指针数组。我应该自己初始化每个指针,这样做?' \t char arr [2] [20] = {“word1”,“word2”}; \t char ** pointer = new char * [2]; \t pointer [0] = arr [0]; \t指针[1] = arr [1];' – Exor 2011-05-31 21:54:49
@Exor:是的,那可行。但它必须“手动”完成,没有自动转换,因为类型不兼容。 – 2011-05-31 22:18:53
“array”是数组在内存中的地址,但它不是char **。虽然你可以投它,如果你尝试
printf("%s", pointer[1]);
,因为你的情况可能是一样的
printf("%s", (char *)(0x00000031));
因为指针[1]的意思是”第二个4字节的指针(假定该应用程序会崩溃x86)从'array'开始。 指针[0]可能不会崩溃,但不会出于同样的原因显示“word1”。
你可能想(这是很难remeber,所以我不得不在网上查询,希望这是正确的):
char (*pointer)[10] = array;
这是一个指向10个字符数组。如果你使用指针[1],它现在意味着“从'数组'开始的第二个10个字符块”。
'char ** pointer = array'就足够了。如果它崩溃了,你就会在别的地方发现bug。你甚至不需要演员。 – hirschhornsalz 2011-05-31 21:22:43
发布您的代码。 '指针=(char **)数组;'应该已经工作了,如果它崩溃了 - 还有其他一些问题。 – littleadv 2011-05-31 21:23:47
嗯它崩溃了,因为我引用第二个char *(word2)与“指针[0]”...而不是使用“指针”所有字符,直到'\ 0'被打印,因此我看到“word1”。但为什么是非法的? char **指针应该是一个char *数组,因此这个表达式“pointer [0]”不应该是非法的...... – Exor 2011-05-31 21:33:31