如何获取多维静态数组的地址? 例如,这是我的数组
char array[2][10] = {"word1", "word2"};
是否可以使用这样的指针来获取地址以使我引用此数组?
char** pointer;
我试过&数组或直接指针=(char **)数组;但它在启动时崩溃了。
答案 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个字符块”。