繁体   English   中英

指向数组结构的指针

[英]Pointer to array structure

我有一个小程序,在编译时会出现以下错误

错误#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;
}

因为它会引发这些错误以及如何解决?

你需要改变

(*ptrcontact+3).order = 3;

ptrcontact[3].order = 3;

或至少,

(*(ptrcontact+3)).order = 3;

要么,

(ptrcontact + 3)->order = 3;

否则,按照优先级规则*优先级高于+ ,从而导致错误。

补充一点, ptrcontact是一个指针( struct agenda ),可以用作+运算符的操作数。

OTOH, *ptrcontactstruct agenda类型,不能用作+运算符的操作数。

您正在取消引用产生该结构的指针,显然您无法对其添加任何内容。 解引用运算符具有最高优先级,您需要这样执行: (*(ptr + 3)).order或使用箭头代替星点: (ptr + 3) -> order

这里的问题是操作优先级:

 (*ptrcontact+3).order = 3;

这将取消引用ptrcontract ,然后尝试将数字添加到已取消ptrcontract结构中。 这将为您提供确切的报告情况。

我的建议:

在这种情况下,要么避免使用地址算术。 操作数组索引。

int baseIndex = 0;
contact[baseIndex + 3].order = 3;

或者,如果确实需要这样做,则从外部隐藏地址算法:

(pcontact + 3)->order = 3;

最后学习C语言操作优先级,或者一次学习一次(但是有些C人不喜欢C ++), C ++操作优先级

错误在(* ptrcontact + 3)行中.order = 3; 和printf(“ \\ n \\ n%d”,(* ptrcontact).order);。 在本说明中,请使用->而不是。 错误将得到解决。

暂无
暂无

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

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