获取多维静态数组的地址

时间:2011-05-31 21:19:44

标签: c arrays

如何获取多维静态数组的地址? 例如,这是我的数组

char array[2][10] = {"word1", "word2"};

是否可以使用这样的指针来获取地址以使我引用此数组?

char** pointer;

我试过&数组或直接指针=(char **)数组;但它在启动时崩溃了。

2 个答案:

答案 0 :(得分:5)

char **pointer表示指针指向指针。 所以*pointer应该是一个指针(例如4字节值,可以解释为地址)。

您的阵列不是这种情况:它是内存中的连续区域(20个字节)。

因此,当您尝试将数组转换为char **时,您的应用程序崩溃了。 无法进行此转换,char **必须指向指针。

答案 1 :(得分:2)

“array”是内存中数组的地址,但它不是char **。虽然您可以投射它,但如果您尝试

,应用程序将崩溃
printf("%s", pointer[1]);

因为在你的情况下可能与

相同
printf("%s", (char *)(0x00000031));

因为指针[1]表示“从'array'开始的第二个4字节指针(假设为x86)”。 指针[0]可能不会崩溃,但出于同样的原因也不会显示“word1”。

你可能想要(这很难记住所以我必须在网上查看,希望它是正确的):

char (*pointer)[10] = array;

这是一个指向10个字符数组的指针。如果你使用指针[1],它现在意味着“从'数组'开始的第二个10个字符块”。