鱼C论坛

 找回密码
 立即注册
查看: 2466|回复: 9

[已解决]结构体指针问题,求解答!!

[复制链接]
发表于 2023-2-8 02:58:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

函数storage中使用结构体指针,给name属性赋值没错,其他的均有错误

函数storage中使用结构体指针,给name属性赋值没错,其他的均有错误

请教各位大佬:
函数storage中使用结构体指针,给name属性赋值没错,其他的均有错误,这是为啥呢?后边几个属性应该如何赋值呢?
最佳答案
2023-2-8 10:22:48
本帖最后由 dolly_yos2 于 2023-2-8 12:45 编辑

2楼的说法不太正确,-> 的优先级高于 *,这里的写法等价于 *((parr+num)->name) 等
第一个中没有问题是由于 name 本身可以隐式转换为指针类型,因此可以解引用,但后面的三个不能
然而第一个尽管没有文法或语义错误,但逻辑可能是错误的:它只将第一个字符进行了复制
后面的三个需要去掉 *,而第一个需要使用 strcpy 之类的函数重写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-8 09:49:54 | 显示全部楼层
*()parr+num)是结构体,不是指针,应该用    .    操作符,不应该用->   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-8 10:19:51 | 显示全部楼层
本帖最后由 两手空空儿 于 2023-2-8 10:35 编辑

parr是指针 , 操作结构体用 -> ,  *parr解引用了以后就不能用->了,要用 . 了
还有你的storage函数为什么要用num这个参数呢,函数的使用范围一下就被限制了, 调用的时候直接用  parr + i 会更好

*(parr + num) -> name = *name    这一句也不对,*name只有一个字符,不是字符串,
两个字符数组不能直接用 = 赋值, 这句应该用strcpy函数来完成  strcpy((parr + num) -> name, name)

4楼说的透彻
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-8 10:22:48 | 显示全部楼层    本楼为最佳答案   
本帖最后由 dolly_yos2 于 2023-2-8 12:45 编辑

2楼的说法不太正确,-> 的优先级高于 *,这里的写法等价于 *((parr+num)->name) 等
第一个中没有问题是由于 name 本身可以隐式转换为指针类型,因此可以解引用,但后面的三个不能
然而第一个尽管没有文法或语义错误,但逻辑可能是错误的:它只将第一个字符进行了复制
后面的三个需要去掉 *,而第一个需要使用 strcpy 之类的函数重写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-8 10:49:20 | 显示全部楼层
dolly_yos2 发表于 2023-2-8 10:22
2楼的说法不太正确,-> 的优先级高于 *,这里的写法等价于 *((parr+num)->name) 等
第一个中没有问题是由 ...

明白了,谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-8 10:49:39 | 显示全部楼层
两手空空儿 发表于 2023-2-8 10:19
parr是指针 , 操作结构体用 -> ,  *parr解引用了以后就不能用->了,要用 . 了
还有你的storage函数为什 ...

懂啦,谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-8 10:49:58 | 显示全部楼层
洋洋痒 发表于 2023-2-8 09:49
*()parr+num)是结构体,不是指针,应该用    .    操作符,不应该用->

谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-8 11:06:38 | 显示全部楼层
dolly_yos2 发表于 2023-2-8 10:22
2楼的说法不太正确,-> 的优先级高于 *,这里的写法等价于 *((parr+num)->name) 等
第一个中没有问题是由 ...

不好意思,还有个问题,*(parr+num)将(parr+num)解引用了,此时指向的应该是这个结构体,但是使用*(parr+num).score = score; 这条语句却报了error: 'parr' is a pointer; did you mean to use '->',这是为什么呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-8 11:23:02 | 显示全部楼层
小帅才1 发表于 2023-2-8 11:06
不好意思,还有个问题,*(parr+num)将(parr+num)解引用了,此时指向的应该是这个结构体,但是使用*(parr+ ...

优先级  .  比  *  高,
(parr + num) -> score
(*(parr + num)).score
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-8 11:48:21 | 显示全部楼层
小帅才1 发表于 2023-2-8 11:06
不好意思,还有个问题,*(parr+num)将(parr+num)解引用了,此时指向的应该是这个结构体,但是使用*(parr+ ...

正如9楼所说, . 与 -> 同级,先于 * 作用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 20:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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