[英]How to initialize arrays in 2 ways using loop and memset?
我试图在我的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]);
}
}
以下几点可帮助您入门:
0
。 Scanf
要求您输入所有值。 这不是必需的,因为您可以通过data[count]=0.0f;
将它们设置为0
data[count]=0.0f;
在for循环中 memset
是一个可以为您做类似事情的函数(包括for循环)。 看一下memset
的文档: 记忆集
void * memset(void * ptr,int值,size_t num);
填充内存块将ptr指向的内存块的前num个字节设置为指定值(解释为无符号字符)。
参量
- ptr:指向要填充的内存块的指针。
- value:要设置的值。 该值以int形式传递,但是函数使用该值的无符号char转换来填充内存块。
- num:要设置为该值的字节数。 size_t是无符号整数类型。
您应该注意,memset仅适用于字节。 因此,您可以使用它将float设置为0
,因为它由4个字节组成,这些字节全为0
,但是例如不能将其设置为1
。 但是,正如其他用户所注意到的那样,在大多数硬件上也是如此。
memset(data,0,sizeof(data));
可用于将数组的所有元素分配为0
显示两种将数组的所有元素初始化为0的方法。一种方法使用循环和赋值语句,另一种方法使用memset()函数。
1)使用for循环和赋值语句
for(i = 0; i<1000; i++)
data[i] = 0.0f;
2)使用记忆集功能
memset(&data,0,sizeof(data));
c99规范支持的简短方法
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 ) );
您还可以在C99中添加另一种方法
// forth
float data[1000] = { [0] = 0.0f };
在C ++中,您还可以使用以下声明
float data[1000] = {};
要么
float data[1000] {};
我认为不需要scanf("%f",&data[count]);
相反,您可以直接将其分配为data[count]=0;
如果使用memset()
函数,则可以将值直接设置为零,以将其设置为数组memset(data,'0',1000);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.