兔比南博万 发表于 2020-8-5 01:09:26

结构体中结构体数组元素表示问题

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        struct person
        {
                char *name;
                char phone;
        };

        struct person man[] = {{"zhang", '1'},{"LI", '1'}};
       
        int i;

        printf("\n\tname\t\t\t\t\tphone\n\n");

        for(i = 0; i < 2; i++)
        {
                printf("%13s\t\t\t%18c\n", *(man + i).name, man.phone);
        }
       
        system("pause");
       
        return 0;
}
该代码中既然可以用man.name 表示各种结构体数组元素的各个属性值那么该结构体数组为何不能改为*(man + i).name呢???理论上在普通数组情况下可以这样表示(man == *(man + i) )。
ps: 作为初学者对这个问题只是单纯的好奇,我知道完全可以用man.name表示

sunrise085 发表于 2020-8-5 07:56:25

可以的,只是你少加了一个括号,
*的优先级要比.的优先级低
*(man + i).name
应该写成
(*(man + i)).name

小甲鱼的铁粉 发表于 2020-8-5 08:11:28

一楼说的对

永恒的蓝色梦想 发表于 2020-8-5 10:42:44

你不可以写成 *(man + i).name,这会被解释为 *((man + i).name),因为 . 的优先级要比 * 高 。
关于优先级的问题,戳我 。
但是你可以写成 (*(man + i)).name 或者是 (man + i) -> name 。

兔比南博万 发表于 2020-8-5 11:57:49

sunrise085 发表于 2020-8-5 07:56
可以的,只是你少加了一个括号,
*的优先级要比.的优先级低

哎呀 忘记考虑这点了,该死该死
页: [1]
查看完整版本: 结构体中结构体数组元素表示问题