c - 访问 c 中结构中的数组成员是访问值还是地址?

标签 c arrays string

在下面的代码中:

struct a  {
    char name[18];
}customer;
scanf("%s",customer.name);
printf("%s",customer.name); 
struct a *pt=&customer;    `

因为将数组名指向that的第一个元素,所以customer.name是否指向这个成员的第一个元素?

在一本书中写到 *(customer.name+2) 等同于 customer.name[2]pt->name[ 2]。但我无法理解这些注释,也无法理解为什么 scanf() 函数中的 customer.name 是地址而 printf() 函数中不是地址?

最佳答案

在此处的 print()scanf() 示例中,customer.name 解析为指向第一个元素的指针数组 name,它是 struct a 类型的 customer 变量的成员。

为了消除混淆,在 %s 格式说明符与 printf() 的情况下,期望的参数类型是指向数组第一个元素的指针。所以,在这个 printf() 调用的情况下,参数 customer.name 是正确的,它是一个指针。

关于c - 访问 c 中结构中的数组成员是访问值还是地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48249573/

相关文章:

java - 在不关心顺序的情况下对集合进行哈希处理的最有效方法是什么?

c++ - 使用 VMIME/libcurl 不通过服务器发送电子邮件(或 : SMTP server library)

c# - 如何使用 WCHAR* out 参数从 C# 调用 C 函数?

c - 构建失败 - 嵌入式 C STM32F10X

c - 替换 C 中的字符

java - java中的两个数组打乱顺序

c - 如何将空格分隔的 float 从字符串中提取到 c 中的另一个数组中?

java - 有没有像数组一样工作的列表?

java - 从字符串中删除多个子字符串 - Java

c++ - 匹配不区分大小写的整个字符串