C 如何使用loop和memset以两种方式初始化数组?

C 如何使用loop和memset以两种方式初始化数组?,c,arrays,function,memset,C,Arrays,Function,Memset,我试图回答我的C编程书中的一个问题,但我不确定我的答案是否正确。 但这本书没有提供任何答案。我是C编程新手,如有任何帮助,将不胜感激。 问题: 假设您声明了如下数组: float data[1000]; 显示将数组的所有元素初始化为0的两种方法。 一个方法使用循环和赋值语句,另一个方法使用memset()函数 我的当前代码: #include <stdio.h> float data[1000]; main(){ int count; for (count =

我试图回答我的C编程书中的一个问题,但我不确定我的答案是否正确。
但这本书没有提供任何答案。我是C编程新手,如有任何帮助,将不胜感激。
问题:
假设您声明了如下数组:

float data[1000];
显示将数组的所有元素初始化为0的两种方法。
一个方法使用循环和赋值语句,另一个方法使用memset()函数

我的当前代码

#include <stdio.h>

float data[1000]; 

main(){
    int count;
    for (count = 0; count < 1000; count++){
        scanf("%f", &data[count]);
    }
    for (count = 0; count < 1000; count++){
        printf("Array %i: %f\n", count, data[count]);
    }
}
#包括
浮动数据[1000];
main(){
整数计数;
用于(计数=0;计数<1000;计数++){
scanf(“%f”和数据[count]);
}
用于(计数=0;计数<1000;计数++){
printf(“数组%i:%f\n”,计数,数据[count]);
}
}
可用于将数组的所有元素分配给0

显示将数组的所有元素初始化为0的两种方法。使用 一个方法的循环和赋值语句,以及memset() 另一个的功能

1) 使用for循环和赋值语句

for(i = 0; i<1000; i++)
    data[i] = 0.0f;

c99规范支持的简洁方法

float data[1000] = {0.0f};

像这样声明数组。

实际上至少有三种方法。:)

在C++中,您也可以使用以下声明< /P>
float data[1000] = {};


我认为不需要
scanf(“%f”)和&data[count])相反,您可以直接为其分配
数据[count]=0


如果使用
memset()
函数,可以直接将数组
memset(数据,'0',1000)的值设置为零

帮助您入门的几点:

  • 您正在尝试将所有项目设置为
    0
    Scanf
    要求您输入所有值。这是不必要的,因为您可以将它们设置为
    0
    ,而
    data[count]=0.0f在for循环的内部
  • memset
    是一个可以为您执行类似操作的函数(包括for循环)。请查看以下文件:
记忆集

void*memset(void*ptr,int值,size\u t num)

填充内存块设置内存块的第一个num字节 由ptr指向指定值(解释为无符号 字符)

参数

  • ptr: 指向要填充的内存块的指针
  • 价值: 要设置的值。该值作为int传递,但函数使用该值的无符号字符转换填充内存块
  • 数字: 要设置为该值的字节数。 size_t是无符号整数类型

您应该注意到memset只处理字节。因此,您可以使用它将浮点设置为
0
,因为它由4个字节组成,这些字节都是
0
,但您不能将其设置为
1
。但正如其他用户所注意到的,在大多数硬件上恰好如此。

memset
和循环赋值不是初始化。C标准没有定义所有位都设置为零的浮点值为0.0f。这里有一个使用memcpy的正确方法:。当然,但是(阅读问题)它没有列在“使用”下的练习中。@Jongware更新答案buddy似乎有人对所有答案投了否决票,只是不需要注意。@JensGustedt stackexchange是否有任何机制来检测这样的下行投票者?请注意,
sizeof
不是一个函数,因此可以将其写成只是
memset(data,0,sizeof data) sieof(数据)<代码>是完全好的iMo @ GOPI,为什么你要引用C问题中的C++文档?当然,它是有效的,但它之所以有效,是因为参数是一个放在括号内的表达式(表达式
data
),它当然也是一个表达式,即
(data)
。人们把它写成函数调用,这让人困惑,我倾向于指出这一点。另外请注意(这不是一个解决方案,而是一个事实),只要将
数据
定义为
外部
(即全局)变量,它就已经用0中的字节进行了初始化,就好像使用了
memset()
float data[1000] = {0.0f};
// first
float data[1000] = { 0.0f };

// second
size_t i;
for ( i = 0; i < 1000; i++ ) data[i] = 0.0f;

// third
memset( data, '\0', sizeof( data ) );
// forth
float data[1000] = { [0] = 0.0f };
float data[1000] = {};
float data[1000] {};