我有一个小程序,在编译时会抛出以下错误
错误#2168:' +'的操作数有不兼容的类型和结构议程'和' int'。
错误#2113:'的左操作数。'具有不兼容的类型' int'。
错误#2088:需要左值。
这是我已完成的代码
#include <stdio.h>
struct agenda{
int order, cellular;
char name[30], last_name[30], street[30], city[30], mail[50];
}contact[10];
int main(void)
{
struct agenda *ptrcontact;
ptrcontact = &contact[0];
(*ptrcontact+3).order = 3;
printf("\n\n %d", (*ptrcontact).order);
return 0;
}
因为它会抛出这些错误以及如何修复它们?
答案 0 :(得分:6)
您需要更改
(*ptrcontact+3).order = 3;
到
ptrcontact[3].order = 3;
或者,至少
(*(ptrcontact+3)).order = 3;
或,
(ptrcontact + 3)->order = 3;
否则,根据precedence rule,*
优先于+
,导致错误。
只是为了补充一点,ptrcontact
是一个指针(struct agenda
),可以用作+
运算符的操作数。
OTOH,*ptrcontact
属于struct agenda
类型,不能用作+
运算符的操作数。
答案 1 :(得分:2)
您正在取消引用产生结构的指针,显然您无法添加任何内容。取消引用运算符具有最高优先级,您需要这样做:(*(ptr + 3)).order
或使用箭头而不是星点:(ptr + 3) -> order
答案 2 :(得分:0)
这里的问题是操作优先级:
(*ptrcontact+3).order = 3;
这会导致ptrcontract
,然后尝试将数字添加到dereferred结构中。这会为您提供报告的确切情况。
我的建议:
在这种情况下要么避免使用地址文本。操作数组索引。
int baseIndex = 0;
contact[baseIndex + 3].order = 3;
或者如果你真的必须这样做,请从外面隐藏地址算术:
(pcontact + 3)->order = 3;
最后学习C language operations priority或者做一次(但有些C人不喜欢C ++),C++ operations priority
答案 3 :(得分:0)
错误在于行 (* ptrcontact + 3).order = 3;和printf(&#34; \ n \ n%d&#34;,(* ptrcontact).order);.在本说明书中使用 - &gt;代替 。错误将得到解决。