它没有使所有数组0和我无法找到为什么帮助请
arr_temp2
中的最后一个数字是垃圾,但它之前的数字是0,但我在倒数第二个27
big=10 small=7
我只能使用基本功能(for,if,while)
int arr_temp[big_size+small_size];
int arr_temp1[(big_size+small_size+2)];
int arr_temp2[(big_size+small_size+1)];
for (j=0; j<big_size+small_size; j++)
{
arr_temp[j]=0;
}
for (t=0;t<(sizeof(arr_temp1)/sizeof(int));++t)
{
arr_temp1[t]=0;
}
for (z=0;z<(sizeof(arr_temp2)/sizeof(int)); ++z)
{
arr_temp2[z]=0;
}
答案 0 :(得分:3)
您可能希望改为使用memset
:
memset(arr_temp1, 0, sizeof(arr_temp1));
或者如果你将数组传递给一个函数,那么它已经衰减了一个指针:
memset(arr_temp1, 0, sizeof(arr_temp1[0]) * (big_size+small_size+2));
答案 1 :(得分:3)
要将数组的所有元素初始化为 0
,您可以将其简单地作为
int arr_temp[big_size+small_size] = {0};
int arr_temp1[(big_size+small_size+2)] = {0};
int arr_temp2[(big_size+small_size+1)] = {0};
请注意,我假设你知道在声明这些数组之前初始化了可变长度数组(在C99中允许)和 big_size
和small_size
是VLA的必要条件。
我之前的回答是错误的。不能以这种方式初始化VLA。
你做得对。没问题。我用代码
测试了它#include<stdio.h>
int main()
{
int big_size = 4;
int small_size = 2;
int arr_temp[big_size+small_size];
int arr_temp1[(big_size+small_size+2)];
int arr_temp2[(big_size+small_size+1)];
for (int j=0; j < big_size+small_size; j++)
{
arr_temp[j]=0;
printf("%d", arr_temp[j]);
}
printf("\n\n");
for (int t=0; t < (signed)(sizeof(arr_temp1)/sizeof(int)); ++t)
{
arr_temp1[t]=0;
printf("%d", arr_temp1[t]);
}
printf("\n\n");
for (int z=0;z<(signed)(sizeof(arr_temp2)/sizeof(int)); ++z)
{
arr_temp2[z]=0;
printf("%d", arr_temp2[z]);
}
return 0;
}
获取输出
000000
00000000
0000000
我将sizeof
运算符与unsigned
一起投放,因为它返回size_t
(无符号)类型。比较signed
和无符号类型可能很危险。