C语言 修复“不兼容的指针类型传递”的选项

zi8p0yeb  于 2023-04-05  发布在  其他
关注(0)|答案(2)|浏览(230)
typedef struct {
    int field;
} descriptor_t;

void function(descriptor_t (* descriptor_t)[], int descriptor_count);

descriptor_t g_descriptors[] = { {1}, {2}, {3} };   //

function(g_descriptors, sizeof(g_descriptors) / sizeof(g_descriptors[0]));

我有一个函数,它接受一个描述符数组作为参数。
当我像上面那样调用它时,我得到“不兼容的指针类型传递”警告。
我想摆脱这个警告,欢迎提出建议。
另外,我想了解为什么这个警告,什么可能会出错,如果我传递一个固定大小的数组参数的数组未指定的大小?

ttygqcqt

ttygqcqt1#

宣言

void function(descriptor_t (* descriptor_t)[], int descriptor_count);

第一个参数应该是 * 一个指向descriptor_t的数组的指针 *。要将数组转换为指向数组的指针,只需使用address-of运算符&

function(&g_descriptors, sizeof(g_descriptors) / sizeof(g_descriptors[0]));
         ^
         here
bqf10yzr

bqf10yzr2#

参数descriptor_t (* descriptor_t)[]是一个指向descriptor_t数组的指针。
g_descriptors这样的表达式中的数组会自动转换为指向其第一个元素的指针(存在一些例外,传递给sizeof是例外之一),因此您可以简单地使用指针descriptor_t* array或数组(自动转换为参数中的指针)descriptor_t array[]作为参数。

相关问题