gpt4 book ai didi

c - scanf() 和 printf() 中的字符串变量名之前的 & 符号或没有 & 符号?

转载 作者:行者123 更新时间:2023-12-02 08:12:15 25 4
gpt4 key购买 nike

我使用的编译器是 Dev C++ 5.11。 TDM-GCC 4.9.2 32 位调试。 C99 模式。

1.

 char str1[100], str2[100];
scanf("%s %s", &str1, &str2);
printf("%s %s", &str1, &str2);

2.

 char str1[100], str2[100];
scanf("%s %s", &str1, &str2);
printf("%s %s", str1, str2);

3.

 char str1[100], str2[100];
scanf("%s %s", str1, str2);
printf("%s %s", str1, str2);

每个代码都有效。为什么?我很困惑。

最佳答案

您需要记住的第一件事是数组自然衰减到指向其第一个元素的指针。也就是说,在您的示例中 str1&str1[0] 是相等的。

要记住的第二件事是指向数组的指针和指向其第一个元素的指针将指向同一个位置,但它们在语义上是不同的,因为它们是不同的类型。再次以您的数组 str1 为例:当您执行 &str1 时,您会得到 char (*)[100] 类型的内容,而普通的 >str1(或其等效的&str[0])你会得到char *类型的东西。这些是非常不同的类型。

您需要记住的最后一件事是,在读取/打印字符串时,scanfprintf 都采用指向 char 的指针(即 char *)。参见例如this scanf (and family)this printf (and family)引用资料。

这意味着只有您问题中的备选方案 3 才是正确的。

关于c - scanf() 和 printf() 中的字符串变量名之前的 & 符号或没有 & 符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45629643/

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