gpt4 book ai didi

c - 传递二维数组之间的区别

转载 作者:行者123 更新时间:2023-11-30 20:31:41 26 4
gpt4 key购买 nike

char** fun1(char **arr, int x, int y) 
{/*THE SAME CODE IN EACH FUNCTION */};
char** fun2(*arr[], int x, int y);
{/*THE SAME CODE IN EACH FUNCTION */};
char** fun3(arr[][], int x, int y);
{/*THE SAME CODE IN EACH FUNCTION */};
char** fun4(arr[][10], int x, int y);
{/*THE SAME CODE IN EACH FUNCTION */};

int main()
{
int arr[5][10]
char** x,y,z,v;

x=fun1(arr,5,10);
y=fun2(arr,5,10);
z=fun3(arr,5,10);
v=fun4(arr,5,10);

return 0;
}

这些功能有什么区别吗?特别是我需要知道 fun4 是否与其他产品有任何细节上的不同。

最佳答案

假设您输入 char在每个参数的开头,以便它们完全解析,这就是它们的含义:

  • fun1char **arr作为第一个参数。这被读作“arr 是指向 char 的指针”。您尝试传入的类型是一个数组数组,而不是指针数组,因此它在这里无法正常工作;除了在类型的顶层之外,数组到指针的衰减不起作用。
  • fun2char *arr[]作为第一个参数。这被读作“arr 是指向 char 的指针的不确定长度的数组”。在这里,第一部分是“arr 是一个数组”,因此数组到指针的衰减起作用,这相当于 fun1 (这又行不通)。
  • fun3char arr[][]作为第一个参数。这被读作“arr 是一个不确定长度的数组 char s 的不确定长度数组”。您不能在数组中存储不确定长度的数组(因为您无法在编译时知道它们的大小),因此无法立即编译。
  • 最后,fun4char arr[][10]作为第一个参数。这被读作“arr 是一个由 10 个 char 组成的不确定长度的数组”。对于数组到指针的衰减,这相当于 char (*arr)[10] ,“arr 是指向十个 char 的数组的指针”。这与其他不同,因为它期望数组包含固定大小的数组而不是指针。这将与您传入的内容匹配,除非您使用 intmain中声明它,和int不等于char .

您未列出的示例是 char *arr[5] , char arr[5][] ,或char arr[5][10] 。这些被读作“arr 是一个由五个组成的数组...`,并且从数组到指针的衰减分别相当于情况 2、3 和 4;特别是,编译器不会验证它是否正确实际上是一个五元素长的数组。

关于c - 传递二维数组之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49971421/

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