gpt4 book ai didi

C Struct & Strcpy,点运算符是否解析为指针

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

假设我有这样的东西

typedef char string[21]    

struct planet_s
{
string name,orbits;
float distance;
string discoverer;
int yeardiscovered;
}one_planet;

接下来我需要初始化一些关于这个星球的信息,因此我的教科书说
strcpy(one_planet.name, "Earth");         ?confused with these
strcpy(one_planet.orbits, "Sun"); ?
one_planet.distance = 150;
one_planet.mass = 6.00e+24;
strcpy(one_planet.discoverer, "me"); ?
one_planet.yeardiscovered = 1000;

我的困惑出现在 strcpy ,让我把东西放在点形式
Strcpy需要一个指向字符串的指针作为它的第一个参数

是否 one_planet.name解析为指向 strcuts 名称数组的指针(点运算符是否解析为地址)?

怎么来的 one_planet.distance =150没有解析为地址,因为我们立即为其分配了值?这就是我学到的, one_planet.distance 直接访问结构元素并分配它。我的困惑在于 strcpy,因为它需要一个地址来存储字符串?

希望你明白我的困惑来自哪里谢谢。

最佳答案

除非它是 sizeof 或一元 & 运算符的操作数,或者当它是用于在声明中初始化另一个数组的字符串文字时,否则类型为“T 的 N 元素数组”的表达式将被转换(“衰减” ) 到“指向 T 的指针”类型的表达式,表达式的值将是数组中第一个元素的地址。

在行中

strcpy(one_planet.name, "Earth"); 

表达式 one_planet.name 的类型为“21 元素数组 char”;由于表达式不是 sizeof 或一元 & 运算符的操作数,因此将其转换为“指向 char 的指针”类型的表达式,并将数组第一个元素的地址传递给 strcpy
. 运算符在这种情况下没有区别;重要的是成员的类型,而不管该成员是如何被访问的。

关于C Struct & Strcpy,点运算符是否解析为指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20069783/

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