【问题标题】:overwriting array indice of struct using short name使用短名称覆盖结构的数组索引
【发布时间】:2023-03-15 02:32:01
【问题描述】:

这就是我想要做的。 我正在尝试创建一个短变量名来引用甚至更改特定索引处的结构的内容(在本例中,索引号为 1)。它会让我的代码更干净。

问题是如果我使用这些行:

AB C=aridiculouslylongstructname[1];
C.a=20;
C.b=200;

当我设置 C.a 的值时,我无法使 aridiculouslylongstructname[1].a 等于 C.a。有没有更好的方法来修改值,而不必总是在 aridiculouslylongstructname[1].a 中设置值?

完整代码如下:

  #include <stdio.h>
  #include <stdlib.h>

  typedef struct{
int a,b;
  }AB;

  int main(){
AB aridiculouslylongstructname[2];
aridiculouslylongstructname[1].a=10; //set member a and member b to 10 and 100 respectively
aridiculouslylongstructname[1].b=100;
AB C=aridiculouslylongstructname[1];
printf("A=%d B=%d\n",aridiculouslylongstructname[1].a,aridiculouslylongstructname[1].b);
C.a=20; //trying to overwrite member a and member b to 20 and 200 respectively
C.b=200;
//and reading it with original member
printf("A=%d B=%d\n",aridiculouslylongstructname[1].a,aridiculouslylongstructname[1].b);
return 0;
  }

【问题讨论】:

  • C 语言确实有指针...指向内存。

标签: arrays c struct


【解决方案1】:

你可以创建一个指向结构的指针,并通过指针访问它的成员。

#include <stdio.h>
#include <stdlib.h>

typedef struct{ int a,b;}MyStructType;

int main(){
  MyStructType aridiculouslylongstructname[2]; //create array of 2 MyStructType's
  aridiculouslylongstructname[1].a=10; //set member a and member b to 10 and 100 respectively
  aridiculouslylongstructname[1].b=100;
  MyStructType * shortname=&aridiculouslylongstructname[1]; //create a pointer to the original instead of a new copy
  printf("A=%d 
  B=%d\n",aridiculouslylongstructname[1].a,aridiculouslylongstructname[1].b);
  shortname->a=20; //because shortname points to aridiculouslylongstructname[1], this overwrites aridiculouslylongstructname[1].a
  shortname->b=200;
  printf("A=%d 
  B=%d\n",aridiculouslylongstructname[1].a,aridiculouslylongstructname[1].b);
  return 0;
}

请注意,要从指针访问结构的字段,请使用箭头 -&gt; 运算符。这相当于先解引用指针,然后通过点运算符. 正常访问,即shortname-&gt;b=200 相当于(*shortname).b=200

【讨论】:

    【解决方案2】:

    我想通了。

    我必须在我的代码中以这种方式声明 C

    AB *C=aridiculouslylongstructname;
    

    然后我可以像这样修改结构中每个成员的值:

     C[n].a = 20;
     C[n].b = 200;
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2013-01-27
    • 2023-04-05
    • 2021-09-17
    • 1970-01-01
    • 2018-11-16
    相关资源
    最近更新 更多