[英]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.