将结构数组的元素传递给函数

时间:2013-12-24 16:42:17

标签: c++ c function struct

我尝试了这段代码,但它不起作用。我只想发送p的元素struct grid,而不是整个结构的函数。

struct grid{ 
  int p; 
  int s; 
}

void create(int a[9][9]); 
{ 
  a[0][2] = 4; 
}

int main() 
{
  struct grid a[9][9]; 
  create(a.s); 
}

4 个答案:

答案 0 :(得分:1)

你基本上有三个选择,切换到两个矩阵,将维度放在结构中,或者让create()取一个struct数组:

两个阵列:

void create(int a[9][9]) 
{ 
  a[0][2] = 4; 
}

int main() 
{
  int p[9][9];
  int s[9][9]; 
  create(s); 
}

- 或 - 将尺寸放在结构中:

struct grid{ 
  int p[9][9]; 
  int s[9][9]; 
};

void create(int a[9][9])
{ 
  a[0][2] = 4; 
}

int main() 
{
  struct grid a; 
  create(a.s); 
}

- 或 - 传递一个struct

数组
struct grid{ 
  int p; 
  int s; 
};

void create(struct grid[9][9] * a) 
{ 
  (*a)[0][2].s = 4; 
}

int main() 
{
  struct grid a[9][9]; 
  create(&a); 
}

你不能从数组或结构矩阵中挑选元素

答案 1 :(得分:1)

正如其他人指出的那样,你不能以这种方式做到。解决该问题的一种方法是在将矩阵传递给方法之前对其进行转换:

using namespace std;

struct grid{ 
    int p; 
    int s; 
};

void create(int a[9][9])
{ 
    a[0][2] = 4; 
}

void ExtractS(struct grid a[9][9], int s[9][9])
{
    for (int i = 0; i < 9; i++)
        for (int j = 0; j < 9; j++)
            s[i][j] = a[i][j].s;
}

int main() 
{
    struct grid a[9][9]; 
    int s[9][9];
    ExtractS(a, s);
    create(s);
}

但这会引发更多问题而不是答案:

  • 必须将数据返回到原始结构矩阵中,否则由create创建的更改将丢失
  • 此方法效率非常低,因为它复制了所有数据

也许您应该修改设计并使create函数接收grid元素的矩阵。

答案 2 :(得分:1)

初步说明: void create(int a[9][9])实际上变成了 void create(int a[][9])void create(int (*a)[9])

您可能需要void create(int (&a)[9][9])

就像你一样 struct grid { int p; int s; };struct grid a[9][9];

你应该像这样初始化:

void create(grid (&g)[9][9])
{
    g[0][2].s = 4;
}

或将您的结构更改为

struct grid {
    int p[9][9];
    int s[9][9];
};

然后

void create(grid &g)
{
    g.s[0][2] = 4;
}

void create(int (&a)[9][9])
{
    a[0][2] = 4;
}

您分别致电create(g)create(g.s)

答案 3 :(得分:0)

您正在将一个整数传递给一个函数,该函数需要一个指向2D array的指针作为参数,

接受结构s的成员变量grid作为参数的函数的原型应该如下,

void create(int a); 

在函数定义中,程序中还有一个不需要的分号。

void create(int a[9][9]); <-- No need
{ 
    a[0][2] = 4; 
}`
`