gpt4 book ai didi

c - 如何通过引用将 char * foo[SIZE][SIZE] 传递给函数并取消引用它?

转载 作者:太空宇宙 更新时间:2023-11-04 05:00:36 27 4
gpt4 key购买 nike

我真的很难理解如何将 char 指针的二维数组的地址传递给函数,并实际为其赋值。

void fillWithStrings( 'pointer to foo'  ){ // How to do this part?
for( int i = 0; i < SIZE; i++ ) {
for( int j = 0; j < SIZE; j++ ) {
char * temp = malloc( sizeof(char) * 3 );
temp = "hi";
*foo[i][j] = temp; // And this part?
}
}
}

int main(){
char * foo[SIZE][SIZE];

fillWithStrings( &foo );

return 0;
}

是的,在它被声明的范围内填充 foo 更容易,但关键是,如何在另一个函数内完成它?

最佳答案

不需要将 foo 的地址传递给 fillWithStrings(),因为该函数不想更改 foo 的值> (顺便说一句,这甚至是不可能的,因为 foo 是一个数组)。

只需传递 foo,然后它将衰减为指向第一个元素的指针。它的第一个元素是 char * [SIZE],后者的地址是 char * (*) [SIZE]

这样做的代码可能如下所示:

#include <stdio.h>
#include <stdlib.h>

#define SIZE (7)

int array_init(char * (*a)[SIZE])
{
for (size_t i = 0; i < SIZE; ++i)
{
for (size_t j = 0; j < SIZE; ++j)
{
a[i][j] = calloc(42, sizeof *(a[i][j])); /* Allocate 42 times the size of
what (a[i][j]) points , that is a char.*/
if (NULL == a[i][j])
{
return -1;
}
}
}

return 0;
}

int main(void)
{
char * a[SIZE][SIZE] = {0};

if (-1 == array_init(a))
{
perror("array_init() failed");
exit(EXIT_FAILURE);
}

/* Do stuff. */

/* Free a's elements here. */

return EXIT_SUCCESS;
}

关于c - 如何通过引用将 char * foo[SIZE][SIZE] 传递给函数并取消引用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38023762/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com