[英]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.