Arrays 运行时C中的Init数组
我还没有找到在运行时初始化二维数组的示例 这是perl中的代码;有人能把这段代码“翻译”成C吗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); }
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”已被删除。