如何在C中添加struct中的元素

时间:2016-01-17 13:55:42

标签: c pointers struct

我有以下代码:

struct home {
    int id; 
    int p;  
    int prio; 
    int rasp; 
};

struct home *P[5];

int new[6][5] =
{

    { 1,  3, 5, 3, 1 }, 
    { 3,  5, 6, 5, 1 },
    { 7,  2, 3, 5, 0 },
    { 12, 1, 5, 3, 0 },
    { 20, 6, 3, 6, 1 },
    { 20, 7, 4, 7, 1 },
};

我需要将所有元素(没有每行的第一个元素)从数组new添加到struct home(在循环中)。例如,如果我们采用第一行,它看起来像这样:

id=3
p=5
prio=3
rasp=1

4 个答案:

答案 0 :(得分:4)

你可以这样做:

P[0]=&new[0][1];

如果您确定您的矩阵具有结构所需的有效元素数量。

这将把结构向量的元素链接到矩阵,所以如果矩阵中的一个元素发生变化,它也会改变结构。

答案 1 :(得分:3)

您可以在代码中执行类似的操作,因为您的结构没有填充。因此它比复制元素更有效。您可以直接转换新矩阵的一部分,并在struct home指针数组中分配给struct home指针。

#include "stdio.h"

struct home {
    int id; 
    int p;  
    int prio; 
    int rasp; 
};

struct home *P[6];

int new[6][5] =
{

    { 1,  3, 5, 3, 1 }, 
    { 3,  5, 6, 5, 1 },
    { 7,  2, 3, 5, 0 },
    { 12, 1, 5, 3, 0 },
    { 20, 6, 3, 6, 1 },
    { 20, 7, 4, 7, 1 },
};



int main()
{
   int i;
   int offset = 1; // exclude first element.
   for (i =0; i <6; ++i ) { 
      P[i]  = (struct home*)&new[i][offset];
   }
   for (i= 0; i < 6; ++i) {
     printf("%dth struct is\n",i);
     printf("[%d].id:%d\n",i,P[i]->id);
     printf("[%d].p:%d\n",i,P[i]->p);
     printf("[%d].prio:%d\n",i,P[i]->prio);
     printf("[%d].rasp:%d\n",i,P[i]->rasp);
  }
}

答案 2 :(得分:2)

编写一个按元素执行复制元素的函数:

#define INDEX_ID 1
#define INDEX_P 2
#define INDEX_PRIO 3
#define INDEX_RAPS 4

struct home {
    int id; 
    int p;  
    int prio; 
    int rasp; 
};

int copydata( struct home *h, int row, int arr[][5] )
{
   h->id = arr[row][INDEX_ID];
   h->p = arr[row][INDEX_P];
   h->prio = arr[row][INDEX_PRIO];
   h->rasp = arr[row][INDEX_RAPS];
}

由于您知道数据是按升序排列的,因此您也可以使用memcpy。但为此,您必须使用大量关于数据结构的隐式知识。

int copydata( struct home *h, int row, int arr[][5] )
{
   memcpy( h, arr[row] + INDEX_ID, 4*sizeof(int) );
}

这是在循环中调用copydata的方法:

int data[6][5] =
{
    { 1,  3, 5, 3, 1 }, 
    { 3,  5, 6, 5, 1 },
    { 7,  2, 3, 5, 0 },
    { 12, 1, 5, 3, 0 },
    { 20, 6, 3, 6, 1 },
    { 20, 7, 4, 7, 1 },
};

struct home *P[6];
for ( int row = 0; row < 6; row++ )
{
   P[row] = malloc( sizeof(struct home) );
   copydata( P[row], row, data );
}

答案 3 :(得分:0)

您可以创建所有变量的数组,并使用其名称创建枚举。

然后您可以插入数组中的值。