C结构和;Strcpy,点运算符是否解析为指针
假设我有这样的东西C结构和;Strcpy,点运算符是否解析为指针,c,arrays,pointers,struct,C,Arrays,Pointers,Struct,假设我有这样的东西 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 t
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
是否解析为指向struts name数组的指针(点运算符是否解析为地址)
为什么one_planet.distance=150
不能解析为地址,因为我们会直接给它赋值?这就是我学到的,一个行星距离直接访问struct元素并分配它。我的困惑在于strcpy,因为它需要一个地址来存储字符串
希望您能理解我的困惑来自于感谢。点运算符与此无关 将您的代码与此进行比较:
int main(void)
{
char string[21];
strcpy(string, "Earth");
return 0;
}
上面的代码是100%自然、精细的C代码,它依赖于这样一个事实:在某些上下文中,数组的名称(string
)的计算结果只是指向第一个参数的指针
换句话说,上面的字符串
被计算为与表达式&string[0]
完全相同的地址值
字符串嵌入到结构中的事实与此无关。不,创建指针的不是“点运算符”
,这是因为轨道
成员是一个数组。当作为参数传递时,所有数组都会衰减为指针。除非它是sizeof
或一元&
运算符的操作数,或者当它是用于初始化声明中另一个数组的字符串文字时,“N-element array ofT
”类型的表达式将被转换(“衰减”)指向类型为“指针指向T
”的表达式,表达式的值将是数组中第一个元素的地址
排队
strcpy(one_planet.name, "Earth");
表达式one_planet.name
的类型为“char的21元素数组”;由于表达式不是sizeof
或一元&
运算符的操作数,它被转换为类型为“指针指向char
”的表达式,数组的第一个元素的地址被传递到strcpy
在这种情况下,
操作符不会产生任何影响;重要的是成员的类型,而不管如何访问该成员 @Adriano不,有一个非常C-ish的typedef
,它将字符数组别名为名称string
。@unwind完全忽略了这一点@Adriano有一个typedef
可能看起来像typedef char[21]字符串
或typedef char*字符串
。您正在使用std::string
和c++
得出结论。但是代码本身。。。是的,它离。。。甚至可以工作。@luk32:实际上,typedef char string[21]
是正确的。欢迎来到C@哦,我原来是C
的浪子。在我到达typedef
ing恒定大小的向量之前,我漫游到了std::
s的土地。谢谢你的纠正,每天都有新的东西要学。我认为OP在理解c
语法方面有很大的困难,而且你对string
的含义改变了很多。现在它可能会变得非常混乱。尤其是当您鼓励比较代码时。也许离开typedef
会更有用。。。虽然我不擅长教编程。只是个主意。