传递指针指针时,指针类型不兼容

Art*_*uin 0 c pointers

我正在尝试传递指针指针,以便在另一个函数中修改其内容.为了做到这一点,我已经读过我需要使用指针指针的指针,所以这里是我的"代码"到目前为止:

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);
}
Run Code Online (Sandbox Code Playgroud)

s8是我正在使用的MicroBlaze使用的特殊类型,这是一个问题吗?我还读过我需要使用const,但我不明白在哪里以及为什么?

大小怎么样?我是否需要在内部使用malloc修改才能在内存中保留空间?或者可以将修改功能设置为:

void modify(s8 *strings[9][95])
Run Code Online (Sandbox Code Playgroud)

现在,我的问题如下:我在最后一行(修改(&strings))上收到有关错误指针类型的警告.

passing argument 1 of 'modify' from incompatible pointer type
Run Code Online (Sandbox Code Playgroud)

谢谢你的回答!

Som*_*ude 5

首先,数组数组与指针指针不同.

其次,如果您想要修改数组中的字符串,则不需要通过传递指针来模拟传递引用strings.你需要的只是将它作为普通参数传递,当然适当地修改函数:

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

int main(void){
    s8 strings[9][95];
    ...
    modify(strings);
    ...
}
Run Code Online (Sandbox Code Playgroud)

modify函数中,您声明strings是一个指向95字符数组的指针.然后当你stringsmain函数传递它衰变到指向它的第一个元素的指针时,它恰好是指向一个95字符数组的指针.

如果你想更明确地指出作为指针的strings参数modify,你可以做例如

void modify(s8 (*strings)[95]){
    ...
}
Run Code Online (Sandbox Code Playgroud)