c - 为什么将字符串的 scanf 保存到 str 而将 int 发送到 i 的指针?

标签 c arrays pointers scanf

我有这个代码:

char str [80];
int i;
printf ("Enter your family name: ");
scanf ("%79s",str);  
printf ("Enter your age: ");
scanf ("%d",&i);

为什么 stringscanf() 保存到 strint 正在发送到 i 的指针

最佳答案

scanf 需要传递变量的地址才能修改它。

将数组(在本例中为 char 数组)传递给函数时,数组会衰减为指向第一个元素的指针。

因此,为 %s 说明符传递 str 在功能上与传递 &str[0] 相同。

这也适用于指向动态分配内存的 char *:

char *str = malloc(80);
scanf ("%79s",str);

关于c - 为什么将字符串的 scanf 保存到 str 而将 int 发送到 i 的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34820712/

相关文章:

c++ - 用于 pbm 文件的预编码字符和数字资源(可移植位图)

c - C execve() 函数是否终止子进程?

javascript - JavaScript 数组初始化之前的 "var"指的是什么,是列表的元素还是数组本身?

函数原型(prototype)的正确格式

pointers - 将成对数组传递给函数时,未为类型 `&A` 实现特征

c - 为什么 stdlib.h 充满了外部函数原型(prototype)和 gcc 对此的差异

java - Varargs 的替代品

c# - 如何在 C# 中计算数组中 JSON 元素的数量

c++ - 对象创建另一个实例而不是修改指向的实例

c - strstr() 在 gcc 和 VS 中的实现是否具有线性复杂度?