小帅才1 发表于 2023-2-8 02:58:51

结构体指针问题,求解答!!


请教各位大佬:
函数storage中使用结构体指针,给name属性赋值没错,其他的均有错误,这是为啥呢?后边几个属性应该如何赋值呢?

洋洋痒 发表于 2023-2-8 09:49:54

*()parr+num)是结构体,不是指针,应该用    .    操作符,不应该用->   

两手空空儿 发表于 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楼说的透彻

dolly_yos2 发表于 2023-2-8 10:22:48

本帖最后由 dolly_yos2 于 2023-2-8 12:45 编辑

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

小帅才1 发表于 2023-2-8 10:49:20

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

明白了,谢谢大佬{:5_109:}

小帅才1 发表于 2023-2-8 10:49:39

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

懂啦,谢谢啦

小帅才1 发表于 2023-2-8 10:49:58

洋洋痒 发表于 2023-2-8 09:49
*()parr+num)是结构体,不是指针,应该用    .    操作符,不应该用->

谢谢啦

小帅才1 发表于 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 '->',这是为什么呢

两手空空儿 发表于 2023-2-8 11:23:02

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

优先级.比*高,
(parr + num) -> score
(*(parr + num)).score

dolly_yos2 发表于 2023-2-8 11:48:21

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

正如9楼所说, . 与 -> 同级,先于 * 作用
页: [1]
查看完整版本: 结构体指针问题,求解答!!