我正在尝试传递指针指针,以便在另一个函数中修改其内容。为了做到这一点,我已经读过我需要使用指针指针的指针,所以这里是我的“代码”到目前为止:
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
感谢您的回答!
答案 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]){
...
}