结构体指针两种赋值方式怎么会出错
typedefstructpid{floatsetvol;//设定值floatpceo;//比例系数floaticeo;//积分系数intlasterror;//上次误差...
typedef struct pid
{ float setvol;//设定值
float pceo;//比例 系数
float iceo;//积分系数
int lasterror;//上次误差
int preerror;
float sumerror;
}pid;
pid volpid;
pid *sptr=&volpid;
/*pid *sptr; *sptr=&volpid;先定义,再赋值会报错。为啥呢?*/
最后一行改为:/*pid *sptr; sptr=&volpid;先定义,再赋值会报错。为啥呢?*/ 展开
{ float setvol;//设定值
float pceo;//比例 系数
float iceo;//积分系数
int lasterror;//上次误差
int preerror;
float sumerror;
}pid;
pid volpid;
pid *sptr=&volpid;
/*pid *sptr; *sptr=&volpid;先定义,再赋值会报错。为啥呢?*/
最后一行改为:/*pid *sptr; sptr=&volpid;先定义,再赋值会报错。为啥呢?*/ 展开
1个回答
展开全部
pid *sptr = &volpid;
定义 pid 类型的指针并初始化为 volpid 变量的地址,注意,这里不是“赋值”,而是“初始化”。
pid *sptr; *sptr = &volpid;
给 sptr 指向的变量赋值。
错误1:类型不同,*sptr 是指向了变量,就是变量本身,而 &volpid 是变量的地址,一个是变量,一个是变量的地址。
错误2:sptr 没有初始化,给其指向的变量赋值,可能造成崩溃。
错误3:即使 sptr 已初始化,也不能为其指向的变量赋值,因为该变量类型是 struct,按 C 语言的类型划分,属于“聚集类型(aggregation)”,聚集类型不能整体赋值。
改成这样才正确:
pid *sptr; sptr = &volpid;
定义 sptr 指针,然后赋值为 volpid 变量的地址。
定义 pid 类型的指针并初始化为 volpid 变量的地址,注意,这里不是“赋值”,而是“初始化”。
pid *sptr; *sptr = &volpid;
给 sptr 指向的变量赋值。
错误1:类型不同,*sptr 是指向了变量,就是变量本身,而 &volpid 是变量的地址,一个是变量,一个是变量的地址。
错误2:sptr 没有初始化,给其指向的变量赋值,可能造成崩溃。
错误3:即使 sptr 已初始化,也不能为其指向的变量赋值,因为该变量类型是 struct,按 C 语言的类型划分,属于“聚集类型(aggregation)”,聚集类型不能整体赋值。
改成这样才正确:
pid *sptr; sptr = &volpid;
定义 sptr 指针,然后赋值为 volpid 变量的地址。
追答
初始化可以放在全局,定义 sptr 时立即赋初值,就是初始化,像这样:
pid* sptr = &volpid;
而赋值是一条语句,只能在函数里进行,像这样:
pid* sptr; // 定义 sptr 但不初始化
void main ()
{
sptr = &volpid; // 赋值
...
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询