簡體   English   中英

僅編譯為指針數組,而不是數組數組

[英]Only compiles as an array of pointers, not array of arrays

假設我定義了兩個數組,每個數組都有2個元素(用於理論目的):

char const *arr1[] = { "i", "j" };
char const *arr2[] = { "m", "n" };

有沒有辦法定義一個包含這兩個數組作為元素的多維數組? 我在考慮以下內容,但我的編譯器顯示有關不兼容類型的警告:

char const *combine[][2] = { arr1, arr2 };

它編譯的唯一方法是讓編譯器將數組視為指針:

char const *const *combine[] = { arr1, arr2 };

這真的是唯一的方法嗎?或者我可以以某種方式保留類型(在C ++中,運行時類型信息會知道它是一個數組)並將combine視為多維數組? 我意識到它的工作原理是因為數組名稱是一個const指針,但我只是想知道是否有辦法在標准C / C ++中做我所要求的而不是依賴於編譯器擴展。 也許我已經習慣了Python的列表,我可以在其中拋出任何東西......

不,首先,這個

char const *combine[][2] = { arr1, arr2 };

無法工作,因為arr1arr2不能用於初始化數組。 但是這個:

char const *arr1[] = { "i", "j" };
char const *arr2[] = { "m", "n" };

char const *(*combine[])[2] = { &arr1, &arr2 };

同樣有效

char const *arr1[] = { "i", "j" };
char const *arr2[] = { "m", "n" };

char const *combine[][2] = { {"i", "j"}, {"m", "n"} };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM