【问题标题】:Assigning int array to a int pointer将 int 数组分配给 int 指针
【发布时间】:2019-05-18 01:28:34
【问题描述】:

我想将数组的值分配给指针或需要更好的方法来执行以下操作。

我有一个结构

struct ver{
    int *a;
    int *b
    int *c;
}

struct Versions{
    int ver1[3];
    int ver2[3];
    int ver3[9];
}

static const Versions versionsinfo[] {
    "001234",
    {0,18,0},
    "000000"
};

static Temp_Data;

Versions * GetVersions() {
    Versions * pt = NULL;
    memcpy(&Temp_Data,&versionsinfo[1]);
    pt = &Temp_Data;
    return pt ;
}

struct Versions *pointer;
pointer = GetVersions();    

struct ver *newVer;
newVer->a= pointer->ver1;
newVer->b= pointer->ver2;
newVer->c= pointer->ver3;

我想将 Ver1 的值分配给 struct ver 的成员,a、b 或 c。

谁能告诉我这在 C 中是否可行。

【问题讨论】:

  • 您需要为struct ver *newVer;分配一些内存,然后才能复制到其成员。
  • "...想要分配 Ver1 的值..." --> 数组不能分配。像newVer->a=Ver1 这样的代码会将Ver1[0] 的地址分配给指针newVer->a。 pranathi,更详细地描述您的总体目标。
  • 实际上想做什么?这闻起来有点像XY Problem
  • newVer 指向什么?
  • pranathi,提示,newVernewVer->a= Ver1; 行中的值是多少?前一行 struct ver *newVer; 不会将 newVer 初始化为任何内容。

标签: c arrays pointers structure


【解决方案1】:

嗯,

int Ver1[3];
int Ver2[9];
int Ver3[9];

他们正在初始化 int 类型的数组。因此,如果您想获得这些数字(即上述数组的大小),您需要这样做

int Ver1 = 3;
int Ver2 = 9;
int Ver3 = 9;

为指针分配一些内存

struct ver *newVer = malloc(sizeof(newVer));

然后将值放入结构中

newVer[0].a = Ver1;
newVer[0].b = Ver2;
newVer[0].c = Ver3;

【讨论】:

  • sizeof(newVer) --> sizeof *newVermalloc(sizeof(newVer)) 分配指针的大小,而不是结构。
  • newVer[0].a = &Ver1,如果您的编译器无法转换。
  • 感谢塔德曼的回复!但我只想分配结构版本的成员。你能看看我更新的问题吗?
  • @PerfectContrast 你的意思是newVer[0].a = &Ver1;等等?
  • @Prajval 不。我想要ver1[3] in int*a中的全部内容
【解决方案2】:

希望对你有帮助

struct ver
{
  int *a;
  int *b;
  int *c;
};

int Ver1[3] = {1,2,3};
int Ver2[3] = {1,2,3};;
int Ver3[9];

struct ver *newVer;

int main()
{
   struct ver newV;/*the memory for struct var is allocated in main */

   newVer = (struct ver *)malloc(sizeof(struct ver));/*memory allocated in heap*/

   newV.a = Ver1;/*OR newVar.a = &Ver1[0];*/
   newV.b = Ver2;
   newV.c = Ver3;
   printf("newV->a[0] is %d", newV.a[0]);
  /*OR*/
  newVer->a = Ver1;
  newVer->b = Ver2;
  newVer->c = Ver3;
  printf("\nnewVar->a[1] is %d", newVer->a[1]);
  free(newVer); 

  return 0;
}

【讨论】:

  • 很好奇,你为什么要编码(struct ver *)?为什么不放弃呢?
  • malloc 返回 (void*) 效果很好,但最好指定 (struct ver *)
  • 演员如果可以,但大约 80% 的人建议不要演员:Do I cast the result of malloc?。考虑newVer = malloc(sizeof *newVer);,它很容易正确编码、审查和维护。
猜你喜欢
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
相关资源
最近更新 更多