C 如何使用loop和memset以两种方式初始化数组?
我试图回答我的C编程书中的一个问题,但我不确定我的答案是否正确。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编程新手,如有任何帮助,将不胜感激。
问题:
假设您声明了如下数组:
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] {};