传递指针

时间:2016-06-21 07:42:16

标签: 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);
}

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

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

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

现在,我的问题如下: 我在关于指针类型不正确的最后一行(修改(&amp; strings))上收到警告。

passing argument 1 of 'modify' from incompatible pointer type

感谢您的回答!

1 个答案:

答案 0 :(得分:5)

首先an array of arrays is not the same as a pointer to a pointer

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

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

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

modify函数中,您声明strings是指向95个字符数组的指针。然后,当您从strings函数传递main时,它会衰减到指向其第一个元素的指针,该元素恰好是指向95个字符数组的指针。

如果你想更明确strings作为指针的modify参数,你可以这样做。

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