嵌套情况下 结构体拷贝与结构体间地址赋值

   之前对C语言结构体的嵌套不太熟练,最近写菜单时想通过这种形式来完成结构体嵌套下的参数关联。

首先嵌套形式下结构体拷贝与结构体间地址赋值与不嵌套并没有太大区别,写法实际一致

一般情况下结构体拷贝与结构体地址赋值

struct a 
{
  int p;
  
  int d;
};

struct a b;
struct a c;
struct a *k;
int main()
{
  b=c;//结构体拷贝
  k=&b;//结构体地址赋值
  
}

         拷贝与地址赋值最大的不同在于拷贝相当于将c中的所有元素赋值给b中所有元素 这样当c中元素数值改变时b中元素不会发生改变。而将b地址赋值给k相当于k与b共用一个地址,k与b就是相当于同一个结构体的两个名字,此时改变b中调用元素值也会改变使用k调用的元素值。这样的也就可以写出单片机上运行的嵌套形式结构体调用了。具体代码如下。


typedef struct
{
    PID_VAR_TYPE Proportion;    // 
  
}PID;

PID angle_pid;

struct menu_struct{
    int line_flag;
    int col_flag;
    int page_flag;
    PID Speed_Wheel;

};

struct menu_struct  Menu_front;

void a()
{
  angle_pid.Proportion=4000;
  Menu_front.Speed_Wheel=angle_pid;

}


int core0_main(void)
{
	
a();
	while (TRUE)
{

     

	 angle_pid.Proportion=4200;
	 
	 ips114_showfloat(100, 4 , Menu_front.Speed_Wheel.Proportion , 5, 3);
    

	}
}

运行结果如下

    可以看到显示数值为4000  说明两个结构体独立a函数执行后进行了拷贝 将angle_pid.Proportion赋值后不影响Menu_front.Speed_Wheel

   再有结构体地址赋值操作代码


typedef struct
{
    PID_VAR_TYPE Proportion;    // 
  
}PID;

PID angle_pid;

struct menu_struct{
    int line_flag;
    int col_flag;
    int page_flag;
    PID *Speed_Wheel;

};

struct menu_struct  Menu_front;

void a()
{
  angle_pid.Proportion=4000;
  Menu_front.Speed_Wheel=&angle_pid;

}


int core0_main(void)
{
	
a();
	while (TRUE)
{

     

	 angle_pid.Proportion=4200;
	 
	 ips114_showfloat(100, 4 , Menu_front.Speed_Wheel->Proportion , 5, 3);
    

	}
}

结果如下

 angle_pid.Proportion的赋值改变,Menu_front.Speed_Wheel->Proportion也发生改变。

补充跟新一点

   在使用的时候发现这个结构出现时报错时不报错的奇妙情况,在多方面查找以后,将两个结构体放在一个文件中做一个先后顺序以后解决,猜测应该时是编译的先后顺序问题,如果有大佬路过欢迎在评论区下方解答这个现象。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值