gpt4 book ai didi

c - 为什么这个数组大小 "workaround"给我一个警告?

转载 作者:太空宇宙 更新时间:2023-11-04 07:19:32 25 4
gpt4 key购买 nike

众所周知,在 C 中作为参数传递时,数组会退化为指针。但是数组的数组只会退化为数组的指针;因此,如果我们将原始数组本身包含在一个数组中,我们可以在将封闭数组传递给函数后检索原始数组长度。这是一个测试这个想法的程序:

/* array_workaround.c */

#include <stdio.h>

void printsize(char array_pointer[][10]);

int main(void)
{
char a[10];

for(char i = 0; i < 10; i++)
a[i] = i;

char a_p[1][10] = {a};

printsize(a_p);

return 0;
}

void printsize(char array_pointer[][10])
{
printf("%lu\n", sizeof(array_pointer[0]));
}

运行时,它打印出正确的值(10),但编译器给出了这个警告:

array_workaround.c:12:24: warning: incompatible pointer to integer conversion
initializing 'char' with an expression of type 'char [10]' [-Wint-conversion]
char a_p[1][10] = {a};

当然,这种“解决方法”的问题在于它要求将数组的大小硬编码到接收它的函数中,这有点违背了整个目的。但是,这确实意味着检查数组的大小是否正确,而不必将长度作为单独的参数传递...(只要它始终为 10!大声笑)。

那么警告是怎么回事?编译器是否“不够聪明”,无法知道这里发生的事情不会破坏任何数据?或者我只是以某种方式走运?任何人都可以找到使它成为实际解决方法的方法,这样您就不必在其中硬编码数字 10 了吗?

最佳答案

char a_p[1][10] = {a};

a的值,它是a的基址,类型为char,用于初始化a_p[0][0],它应该是一个 char,这就是编译器向您发出转换警告的原因。

关于c - 为什么这个数组大小 "workaround"给我一个警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22346023/

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