结构体指针问题,求解答!!
请教各位大佬:
函数storage中使用结构体指针,给name属性赋值没错,其他的均有错误,这是为啥呢?后边几个属性应该如何赋值呢? *()parr+num)是结构体,不是指针,应该用 . 操作符,不应该用-> 本帖最后由 两手空空儿 于 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 12:45 编辑
2楼的说法不太正确,-> 的优先级高于 *,这里的写法等价于 *((parr+num)->name) 等
第一个中没有问题是由于 name 本身可以隐式转换为指针类型,因此可以解引用,但后面的三个不能
然而第一个尽管没有文法或语义错误,但逻辑可能是错误的:它只将第一个字符进行了复制
后面的三个需要去掉 *,而第一个需要使用 strcpy 之类的函数重写 dolly_yos2 发表于 2023-2-8 10:22
2楼的说法不太正确,-> 的优先级高于 *,这里的写法等价于 *((parr+num)->name) 等
第一个中没有问题是由 ...
明白了,谢谢大佬{:5_109:} 两手空空儿 发表于 2023-2-8 10:19
parr是指针 , 操作结构体用 -> ,*parr解引用了以后就不能用->了,要用 . 了
还有你的storage函数为什 ...
懂啦,谢谢啦
洋洋痒 发表于 2023-2-8 09:49
*()parr+num)是结构体,不是指针,应该用 . 操作符,不应该用->
谢谢啦 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 '->',这是为什么呢 小帅才1 发表于 2023-2-8 11:06
不好意思,还有个问题,*(parr+num)将(parr+num)解引用了,此时指向的应该是这个结构体,但是使用*(parr+ ...
优先级.比*高,
(parr + num) -> score
(*(parr + num)).score 小帅才1 发表于 2023-2-8 11:06
不好意思,还有个问题,*(parr+num)将(parr+num)解引用了,此时指向的应该是这个结构体,但是使用*(parr+ ...
正如9楼所说, . 与 -> 同级,先于 * 作用
页:
[1]