繁体   English   中英

在C语言中,如何访问指针数组中的结构体中的变量?

[英]In C how do you access a variable in a struct that's in a pointer array?

typedef struct {
    employeeT *employees;
    int nEmployees;
} *payrollT;

typedef struct {
    string name;
} *employeeT;

我需要执行此操作而不将其作为数组访问:

employeeT e = payroll.employees[i];

但这给了我一个错误('('令牌之前的预期标识符):

employeeT e = payroll.(*(employee+i));

在struct之前,我可以互换雇员[i]和*(employee + i)

为什么需要避免使用数组语法?

*(ptr+offset) == ptr[offset] ,每次都是严格的。

您没有性能损失,数组语法更加清晰。


编辑:我才真正问题的症结。

如果payroll (在您的示例中)是指针类型,则需要使用箭头运算符而不是点运算符:

payroll->employees[0]

如其他人所述,

employeeT e = *(payroll.employees + i);

(或者*(payroll->employees + i)如果payroll是指针而不是结构本身)可以正常工作。

但是,让我们回到您的问题; 为什么您认为无法使用数组语法访问payroll.employees 就两个表达式相等而言,C标准非常清楚-这实际上是数组下标运算符[ ] (第6.5.2.1节数组下标 )的定义:

下标运算符[]的定义是E1 [E2]与(*((E1)+(E2)))相同。 由于适用于二进制+运算符的转换规则,如果E1是一个数组对象(相当于一个指向数组对象的初始元素的指针),而E2是一个整数,则E1 [E2]指定E1的第E2个元素E1(从零开始计数)。

好吧,你可以这样做:

employeeT e = *(payroll.employees+i);

但是数组语法出了什么问题? 当然更清楚了。

employeeT e = *(payroll.employee+i);

应该做的工作。

您必须回顾一下struct的使用。 尝试*(payroll.employee+i)

编辑:或者您可以使用(*payroll).employee[i]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM