如何解决C在运行时初始化数组
我找不到在运行时初始化二维数组的示例。
这是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,0);
}
if( $ARGV[0] eq '9x9' ) {
$gr=9; $gc=9; # grid is all zeroes
@ct=(2,3,4,5,3);
}
if( $ARGV[0] eq '6x10' ) {
$gr=6; $gc=10;
@grid = (
[0,8,9,6,7],[6,7,1,0],[5,[0,1],[1,);
@ct=(14,41,15,29,26,33,32,27,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;
从复合文字中复制:
memcpy(myPoints,(const int [3][3]) { { 1,9} },sizeof myPoints);
在第一种情况下(使用定义初始化),如果myPoints
是静态对象,则编译器可能会将值存储在目标文件中,以作为程序加载的一部分进行加载。如果myPoints
是自动对象,则很可能会生成指令来存储数组的值。从技术上讲,C标准允许编译器针对上述任何示例执行上述任一操作。使用哪个是优化和编译器实现的问题。因此,除非性能问题很重要,否则在“运行时”进行初始化的区别就根本无关紧要。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。