有点愚蠢的问题,但我无法解决这个问题。我想使用点符号来访问结构的成员变量,以保持一些蔓延的代码尽可能整洁。我希望我不会因为不想以传统的方式去做而被告知。我试图这样做: 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;
但那个剂量有效。我知道它很简单,我曾经知道如何,但我生锈,只是不记得/找出如何。
答案 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;
...
}