gpt4 book ai didi

c - 使用 "*[]"和 "[][]"和 "(*)[]"传递 2D 数组?

转载 作者:行者123 更新时间:2023-12-02 20:30:16 25 4
gpt4 key购买 nike

请参阅以下代码片段:

void foo(char str[][MAX_SIZE])
{
strcpy(str[0], "Hi");
strcpy(str[1], "Hey");
}

int main(void) {
int V = 2;
char str[V][MAX_SIZE];

foo(str);

int i;
for(i = 0; i < V; ++i)
printf("%s\n", str[i]);

return 0;
}

输出符合预期:

Hi    
Hey

当 foo 的定义更改为:

void foo(char *str[MAX_SIZE]) { ... } <------------- Runtime error

它闪烁运行时错误

但是,将指针括在括号中效果很好:

void foo(char (*str)[MAX_SIZE]) { ... } <-------------- Works fine

我想我对将 2D 数组传递给方法的不同方法感到困惑。

您能帮我理解 foo() 的每个定义的含义、它的期望是什么以及它如何处理它接受的参数吗?

最佳答案

这两个具有相同的签名,并且是等效的函数声明(参数调整后):

void foo(char str[][MAX_SIZE]);
void foo(char (*str)[MAX_SIZE]);

在这两者中,str 都是指向 MAX_SIZE chars 数组的指针。这个,

void foo(char *str[MAX_SIZE]);

但是,是一个函数,其参数经过调整后是指向 char 的指针,即相当于

void foo(char **str);

关于c - 使用 "*[]"和 "[][]"和 "(*)[]"传递 2D 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33355999/

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