簡體   English   中英

傳遞指針的指針時指針類型不兼容

[英]Incompatible pointer type when passing a pointer of pointer

我試圖傳遞一個指針的指針,以便在另一個函數中修改其內容。 為了做到這一點,我讀到我需要使用一個指針的指針,所以到目前為止,這是我的“代碼”:

void modify(s8 ***strings){
    // Modifies the strings
}

void main(){
    s8 strings[9][95];
    for(i = 0 ; i < 9 ; i++){
        for(j = 0 ; i < 95 ; i++){
            strings[i][j] = 0;
        }
    }
    modify(&strings);
}

s8是我正在使用的MicroBlaze使用的一種特殊類型,這有問題嗎? 我還讀到我需要使用const,但我不知道在哪里以及為什么?

大小呢? 我是否需要在Modify內部使用malloc以便在內存中保留空間? 或者可以將修改功能設置為:

void modify(s8 *strings[9][95])

現在,我的問題如下:我在最后一行(modify(&strings))收到關於不正確的指針類型的警告。

passing argument 1 of 'modify' from incompatible pointer type

感謝您的回答!

首先, 數組的數組與指向指針的指針不同

其次,如果您想修改數組中的字符串,則不需要通過將指針傳遞給strings來模擬按引用傳遞。 您需要做的就是將其作為普通參數傳遞,當然要適當地修改函數:

void modify(s8 strings[][95]){
    ...
}

int main(void){
    s8 strings[9][95];
    ...
    modify(strings);
    ...
}

modify函數中,您將strings聲明為指向95字符的數組的指針。 然后,當您從main函數傳遞strings ,它會衰減到指向第一個元素的指針,該指針恰好是指向95字符的數組的指針。

如果您想更清楚地將strings參數中的modify作為指針,則可以執行例如

void modify(s8 (*strings)[95]){
    ...
}

暫無
暫無

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

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