在 C 语言中,我创建了一个二维数组,其中所有元素都是零。
我是用以下方法实现的:
int a[5][5],i,j; //a is the required array
for(i=0;i<5;i++)
for(j=0;j<5;j++)
a[i][j]=0;
我知道另外一种方法:
我知道其他的方式:
int a[5][5]={0};
这两者是一样的吗?还是有区别?应该选择哪一个?谢谢!
两种方法都有相同的效果,但第二种方法通常会更快,因为它允许编译器优化和矢量化该代码。
另一种广泛接受的方法(也可优化)是:
memset(a, 0, sizeof(a));
a
被声明为数组时,在 C 中 a
和 &a
具有相同的含义。 - Sergey L.memset(&a, 0, sizeof(a));
第二个比较有用。
第一个使用for
循环,所以速度较慢。
还有其他初始化数组的方法...
int myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; // All elements of myArray are 5
int myArray[10] = { 0 }; // Will initialize all elements to 0
int myArray[10] = { 5 }; // Will initialize myArray[0] to 5 and other elements to 0
static int myArray[10]; // Will initialize all elements to 0
/************************************************************************************/
int myArray[10];// This will declare and define (allocate memory) but won’t initialize
int i; // Loop variable
for (i = 0; i < 10; ++i) // Using for loop we are initializing
{
myArray[i] = 5;
}
/************************************************************************************/
int myArray[10] = {[0 ... 9] = 5}; // This works in GCC
memset(myArray, 0, sizeof(myArray));
[0 ... 9] = 5
在其他编译器中也是有效的。这在使用 -std=gnu99
的 clang
和 icc
中对我很有用。 - Sergey L.如果我不想过度紧张我的眼睛(和编译器),我更喜欢后者。
0
。 - alk