OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5360|回复: 3

求助 C语言指针,结构体问题

[复制链接]

1

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2019-11-5
在线时间
20 小时
发表于 2020-2-25 09:09:10 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 aAliang 于 2020-2-25 09:09 编辑

]`}E$]L2RO}_M5JR{1XU.jpg
1. 这个打印出来的file:///C:/Users/hyl/AppData/Roaming/Tencent/QQTempSys/%25W@GJ$ACOF(TYDYECOKVDYB.pnga.name为什么也是Qian,前面不是把Zhao复制给了file:///C:/Users/hyl/AppData/Roaming/Tencent/QQTempSys/%25W@GJ$ACOF(TYDYECOKVDYB.pnga.name
/*************************************************************/
/*************************************************************/
微信图片_20200225090428.png
2.这个结果是7,7,7,3,7,7;前面我知道,后面两个*p和**r为什么等于7

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2019-6-18
在线时间
79 小时
发表于 2020-2-25 13:00:03 | 显示全部楼层
#include"stdio.h"
#include"stdlib.h"
int k=7;

void f(int **s)
{
  int *t=&k;//*t就等价于k
  *s=t; //**s等价于t
  printf("%d %d %d\n",k,*t,**s);
}
void main(void)
{
  int i=3,*p=&i,**r=&p;
  f(r);  //r保存了p的地址,*r就是p,*s就是p,*p就是k,*r就是p,**r就是*p
  printf("%d %d %d\n",i,*p,**r);
}
回复

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6544
金钱
6544
注册时间
2017-4-12
在线时间
1245 小时
发表于 2020-2-25 13:17:40 | 显示全部楼层
去看下C语言指针这块的介绍,函数修改一级指针指向的地址,函数参数使用二级指针,你画个内存模型图就可以理解了,假如内存中,k的地址0x00000100,而i的地址0x00000104,p指针的内存地址是0x00000108,而p内部存放的数据为i的地址0x00000104;r的地址是0x0000010C,r指向的是p指针的地址,修改*r 的值,于是,最开始没修改的时候r指向p地址,r = 0x00000108, *r = p内存里面的值(进入函数后就是修改为k的地址),修改p内存里面的值(p内存里面的值由i的地址改为k的地址),所以*p就改变了
回复

使用道具 举报

0

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2019-12-14
在线时间
28 小时
发表于 2020-11-2 09:47:32 | 显示全部楼层
1.结构体赋值的时候是值赋值,指针的值是地址,所以你a和b里的*name指向的是同一个地址,所以你的第二个strcpy函数把两个结构体的name都变成了qian
2.在函数f里,*s=t,指针指向了k,所以值为7,
多看看指针
推荐c和指针这本书
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-9 04:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表