-1

我想问一下是否可以通过for-loop 创建 N 个字段并通过i. 我想得到的插图(我知道这是错误的,只是为了展示这个想法):

int n = 33;

for (i = 1; i <= n; i++) {
   int field_i[5];
}

-> getting field_1[5], field_2[5],...., field_33[5]

C中有没有办法得到这样的东西?我是初学者,如果这是一个非常愚蠢的问题,我很抱歉。

扩展问题(二维数组 - 完美!这就是我要找的!) - 如果我希望用户设置字段数 n,我该如何正确分配内存?(没有scanf等条件的简化版)

int n, num;
int *field;

printf ("Number of fields:\n");
scanf ("%d", &n);

for (i = 0; i < n; i++) {
   field[i] = (int *) malloc (4 * sizeof( *field))
}

我猜那是错的?(当我尝试时它不起作用)

很抱歉添加初学者问题,我试图在谷歌上找到它,但没有成功。

4

4 回答 4

2

您可能正在寻找一个二维数组:

int field[n][5];

例子:

int main(void){

    int n = 3, i, j, k=0;
    int field[n][5];

    for(i = 0; i < n; i++) {
        for(j = 0; j < 5; j++) {
            field[i][j] = k++;
        }
    }

    for(i = 0; i < n; i++) {
        for(j = 0; j < 5; j++) {
            printf("%3d", field[i][j]);
        }
        printf("\n");
    }

    return 0;
}

输出:

Cmd-$> out.exe
  0  1  2  3  4
  5  6  7  8  9
 10 11 12 13 14
于 2013-11-13T11:43:33.457 回答
1

你可以像(声明)一样制作一个二维数组,int field[20][20];然后你可以像(初始化)一样使用它field[i][j] = 5;

对于你的例子

int n = 33;
int field[34][6];
for (i = 1; i <= n; i++) {
   field[i][5] = 4;
}
于 2013-11-13T11:33:17.330 回答
1

不,这是不可能的。但它可以用类似的东西代替:

int (*field_)[m] = calloc( n, m*sizeof(int)); // or malloc(n*m*sizeof(int));
/* a lot of some operations */
free(field_);

所以你有 n 个元素: field_[0], field_[1] ... 。它们都有 m 个整数。

于 2013-11-13T11:35:27.283 回答
0

对于本教程的基本 IO 结帐: 单击此处

#include <iostream>
using namespace std;

int main ()
{
  int n = 0;
  cout << "Please enter number of fields: ";
  cin >> n;
  int field[n];
  for (int i = 0; i < n; i++) {
     field[i] = i;
  }
  //Then to print out what is stored.
  for (int i = 0; i < n; i++) {
     cout << '\n' << field[i];
  }
  return 0;
}

如果在提示输入字段数时输入 10,则输出将是。

   Please enter number of fields: 10

   0
   1
   2
   4
   5
   6
   7
   8
   9
于 2013-11-14T12:24:24.330 回答