gpt4 book ai didi

C编程: '&' with arrays in scanf

转载 作者:行者123 更新时间:2023-12-04 04:37:42 26 4
gpt4 key购买 nike

我的程序中收到一条警告,上面写着:

format '%c' expects argument of type 'char *' , but argument 2 has type 'char (*)[10]' [-Wformat]

这是我的程序:

#include<stdio.h>
int main()
{
char array[10];
scanf("%10c", &array);
printf("%.10s", array);
return 0;
}

当我从 scanf 中删除“&”时,警告消失。我知道,它是一个数组,不需要 &。但它们不是有同样的效果吗?我的意思是“&array”和“array”都给出了其第一个元素的地址,对吗?如果是这样,这里有什么区别?

我在这里阅读了一些相关问题,并用谷歌搜索了很多。有人说,如果“array”是一个数组,而“array”本身是一个指向字符的指针,那么“&array”就是一个指向字符数组的指针。根据它的说法,由于我使用的是 %c,所以我认为应该传递一个指向字符数组的指针。我不知道,如果有人解释 %[width]c 的工作原理,我将非常感激。

我还验证了所有“array”、“&array”和“&array[0]”都给出了其第一个元素的地址。这是我所做的:

int main()
{
char array[10];
puts("ADDRESS:");
printf(" %p \n %p \n %p", array, &array, &array[0]);
return 0;
}

如果它们都给出相同的地址,为什么会发出这样的警告?它也适用于 %s。它们在大多数 Windows 编译器中都可以正常工作,没有任何警告。

由于我是Windows用户,所以我以前从未使用过gcc编译器。我的想法是,像函数指针那样编写 &​​ 并不强制。我读到,您不一定必须用函数指针来编写 & 。

我越来越困惑了,请大家帮我解答一下。

谢谢。

最佳答案

array&array 都产生一个指向相同地址的指针,但类型不同。前者在大多数情况下相当于 &array[0],在您的情况下是 char * 。然而,&array 是数组本身的地址,在您的示例中其类型为 char (*)[10]

关于C编程: '&' with arrays in scanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19441556/

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