[英]C Struct & Strcpy, dot operator does it resolve into a pointer
假设我有这样的东西
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直接访问struct元素并分配它。 我对strcpy感到困惑,因为它需要一个地址来存储字符串?
希望你能理解我的困惑来自哪里。
点运算符与此无关。
比较您的代码与此:
int main(void)
{
char string[21];
strcpy(string, "Earth");
return 0;
}
上面的代码是100%自然且优良的C代码,它依赖于以下事实:在某些情况下,数组名( string
)的计算结果只是指向第一个参数的指针。
换句话说,上面的string
被计算为与表达式&string[0]
完全相同的地址值。
您的字符串嵌入在结构内部的事实与此无关。
除非它是sizeof
的操作数或一元&
运算符,或者它是用于在声明中初始化另一个数组的字符串文字,否则将转换类型为“ T
N元素数组”的表达式(“ decay” )到类型为“指向T
指针”的表达式,该表达式的值将是数组中第一个元素的地址。
在行中
strcpy(one_planet.name, "Earth");
表达式one_planet.name
类型为“ 21个char
数组”; 由于该表达式不是sizeof
或一元&
运算符的操作数,因此它将转换为类型为“指向char
指针”的表达式,并将数组第一个元素的地址传递给strcpy
。
的.
在这种情况下,运算符没有任何区别; 重要的是成员的类型,无论如何访问该成员。
不,它不是“点运算符” .
创建指针的原因是,例如, orbits
成员是一个数组。 当作为参数传递时,所有数组都会衰减到指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.