gpt4 book ai didi

c - 警告传递给函数的二维数组中不兼容的指针类型

转载 作者:行者123 更新时间:2023-11-30 14:57:23 24 4
gpt4 key购买 nike

#include<stdio.h>

void fun(int r,int x,int arr[][x]);

void main()
{
int arr[][3]={1,2,3,4,5,6,7,8,9};
fun(3,3,&arr[0][0]);
}

void fun(int r,int x,int arr[][x])
{
int i=0,j=0;
printf("%d",*(*(arr+i)+j));
}

编译器输出:

warning: passing argument 3 of ‘fun’ from incompatible pointer type [-Wincompatible-pointer-types]
fun(3,3,&arr[0][0]);
^
1.c:2:6: note: expected ‘int (*)[(sizetype)(x)]’ but argument is of type ‘int *’
void fun(int r,int x,int arr[][x]);

最佳答案

arrint 数组的数组(它会立即转换为指向 int` 数组的指针;如果您满足以下条件,请查找“数组到指针衰减”不确定为什么会这样)。

arr[0] 是一个 int 数组(它会立即转换为指向 int 的指针)。

arr[0][0] 是一个 int

&arr[0][0] 是指向 int 的指针。

您的函数需要一个指向 int 数组的指针(您可以使用 int 数组组成的数组,正如我们所知,它会立即转换为指向 int 数组的指针,这正是您的函数所需要的)。 (参数类型写成int arr[][x],即int的数组组成的数组,但这是一个骗局。它是一个指向int 数组。如果您不确定为什么会这样,请查找“参数类型调整”)。

指向 int 的指针与指向 int 数组的指针不同,这就是编译器提示的原因。

幸运的是,您已经有了 arr,它是 int 数组的数组,它会立即转换为指向 int 数组的指针>,这正是您的函数所需要的。

我故意不触及数组大小的问题。

关于c - 警告传递给函数的二维数组中不兼容的指针类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43966967/

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