取消引用c结构指针以启用点表示法

时间:2014-09-15 11:59:52

标签: c syntax structure

有点愚蠢的问题,但我无法解决这个问题。我想使用点符号来访问结构的成员变量,以保持一些蔓延的代码尽可能整洁。我希望我不会因为不想以传统的方式去做而被告知。我试图这样做:     typedef struct {         int a;         int b;     } mystruct;

mystruct myStArray[5];

void doit (mystruct *i) {
// I want to do this:
    i.a++;
    i.b++;
// rather than this:
    i->a++;
    i->b++;
// or this
    (*i).a++;
    (*i).b++;
}

main () {
    int x;
    for (x=0;x<5;x++) {
        doit(&myStArray[x]);
    }
}

我试过这样做:

void doit (mystruct *u) {
  mystruct i = *u;

但那个剂量有效。我知道它很简单,我曾经知道如何,但我生锈,只是不记得/找出如何。

3 个答案:

答案 0 :(得分:2)

通过指针访问struct成员的唯一选项是i->a(*i).a

在C ++中,您可以编写mystruct &i = *u;,但这在C中无效。

您可以制作结构的副本:

mystruct j = *u;
j.a++;

并在需要时将其复制回来:

*u = j;

答案 1 :(得分:1)

此:

mystruct i = *u;

将编译并运行,但当然它不会影响传递给mystruct的{​​{1}}实例中的数据。它将在本地副本中运行,当函数退出时将被丢弃。

没有办法做你想做的事情,你真的应该使用doit()符号。

也许您正在考虑C ++的参考文献?

答案 2 :(得分:1)

第三种方式可以解除引用&#34;数组:indexing

 for(i=0; i < cnt; i++ ) {
    myarray[i].a = 42;
    ...
    }