Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 运行时C中的Init数组_Arrays_C_Multidimensional Array_Initialization_Runtime - Fatal编程技术网

Arrays 运行时C中的Init数组

Arrays 运行时C中的Init数组,arrays,c,multidimensional-array,initialization,runtime,Arrays,C,Multidimensional Array,Initialization,Runtime,我还没有找到在运行时初始化二维数组的示例 这是perl中的代码;有人能把这段代码“翻译”成C吗 my @grid; # grid = 2D array my $gr=0; # rows in grid my $gc=0; # cols in grid my @ct; if( $ARGV[0] eq '5x5' ) { $gr=5; $gc=5; # grid is all zeroes @ct=(2,2,2,2,0); }

我还没有找到在运行时初始化二维数组的示例

这是perl中的代码;有人能把这段代码“翻译”成C吗

  my @grid;     # grid = 2D array
  my $gr=0;     # rows in grid
  my $gc=0;     # cols in grid
  my @ct;
  if( $ARGV[0] eq '5x5' ) {
    $gr=5; $gc=5;    # grid is all zeroes
    @ct=(2,2,2,2,0);
  }
  if( $ARGV[0] eq '9x9' ) {
    $gr=9; $gc=9;    # grid is all zeroes
    @ct=(2,3,4,2,3,5,3,5,3);
  }
  if( $ARGV[0] eq '6x10' ) {
    $gr=6; $gc=10;
    @grid = (
        [0,8,0,0,0,9,3,5,6,7],
        [6,0,0,5,0,7,0,0,1,0],
        [5,0,2,0,4,1,0,0,0,0],
        [0,0,0,0,2,0,0,0,0,1],
        [0,0,0,1,0,0,0,0,0,0],
        [1,5,0,4,2,6,8,0,0,0],
    );
    @ct=(14,41,15,29,26,33,32,27,32,21);
  }

“初始化”只是为对象提供初始值。要在运行时执行此操作,您可以执行以下操作之一:

在定义中初始化,如问题所示:

int myPoints[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9} };
使用单个分配初始化:

myPoints[0][0] = 1;
myPoints[0][1] = 2;
myPoints[0][2] = 3;
myPoints[1][0] = 4;
myPoints[1][1] = 5;
myPoints[1][2] = 6;
myPoints[2][0] = 7;
myPoints[2][1] = 8;
myPoints[2][2] = 9;
使用计算值的代码初始化:

for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j)
    myPoints[i][j] = 3*i + j + 1;

在第一种情况下(使用定义初始化),如果
myPoints
是静态对象,编译器可能会将值存储在对象文件中,作为程序加载的一部分进行加载。如果
myPoints
是一个自动对象,它可能会生成指令来存储数组的值。从技术上讲,C标准允许编译器对上面的任何示例执行这两种操作。这是一个优化和编译器实现的问题。因此,除非性能问题很重要,否则在“运行时”初始化的区别在很大程度上是不相关的。

初始化只是为对象提供初始值。要在运行时执行此操作,您可以执行以下操作之一:

在定义中初始化,如问题所示:

int myPoints[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9} };
使用单个分配初始化:

myPoints[0][0] = 1;
myPoints[0][1] = 2;
myPoints[0][2] = 3;
myPoints[1][0] = 4;
myPoints[1][1] = 5;
myPoints[1][2] = 6;
myPoints[2][0] = 7;
myPoints[2][1] = 8;
myPoints[2][2] = 9;
使用计算值的代码初始化:

for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j)
    myPoints[i][j] = 3*i + j + 1;

在第一种情况下(使用定义初始化),如果
myPoints
是静态对象,编译器可能会将值存储在对象文件中,作为程序加载的一部分进行加载。如果
myPoints
是一个自动对象,它可能会生成指令来存储数组的值。从技术上讲,C标准允许编译器对上面的任何示例执行这两种操作。这是一个优化和编译器实现的问题。因此,除非性能问题很重要,否则在“运行时”初始化的区别在很大程度上是无关的。

只需将
malloc()
与指针一起使用即可。然后,您可以使用
ptr[1]
将其视为一个数组。如果您坚持在运行时使用真正的数组,这是不可能的,至少是C89。这是因为C中的数组是堆栈分配的,您需要在编译时指定大小。如果可以,只需使用
intfoo[5]
就不清楚您的意思。如果在函数内部,C初始值设定项在运行时执行,甚至可以说是在文件范围内执行。不能分配数组,这限制了对复合文字的处理。请澄清您希望实现的目标。只需使用带有指针的
malloc()
。然后,您可以使用
ptr[1]
将其视为一个数组。如果您坚持在运行时使用真正的数组,这是不可能的,至少是C89。这是因为C中的数组是堆栈分配的,您需要在编译时指定大小。如果可以,只需使用
intfoo[5]
就不清楚您的意思。如果在函数内部,C初始值设定项在运行时执行,甚至可以说是在文件范围内执行。不能分配数组,这限制了对复合文字的处理。请澄清你希望实现的目标。我的问题已被修改以澄清我的要求;“我的观点”已被删除。我的问题已被修改,以澄清我的要求;“myPoints”已被删除。