如何使用循环和内存集以两种方式初始化数组?

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]);
    }
}
memset(data,0,sizeof(data));

可用于将数组的所有元素赋值为0

Show two ways to initialize all elements of the array to 0. Use a loop and an assignment statement for one method, and the memset () function for the other.

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

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

2) 使用memset函数

memset(&data,0,sizeof(data));

c99 规范支持的简短方法

float data[1000] = {0.0f};

像这样声明数组。

其实至少有3种方法。:)

// first
float data[1000] = { 0.0f };

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

// third
memset( data, '[=10=]', 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);

帮助您入门的几点:

  • 您正在尝试将所有项目设置为 0Scanf 要求您输入所有值。这不是必需的,因为您可以将它们设置为 0,并在 for 循环中使用 data[count]=0.0f;
  • memset 是一个可以为您做类似事情的函数(包括 for 循环)。查看 memset:
  • 的文档

memset

void * memset ( void * ptr, int value, size_t num );

Fill block of memory Sets the first num bytes of the block of memory pointed by ptr to the specified value (interpreted as an unsigned char).

Parameters

  • ptr: Pointer to the block of memory to fill.
  • value: Value to be set. The value is passed as an int, but the function fills the block of memory using the unsigned char conversion of this value.
  • num: Number of bytes to be set to the value. size_t is an unsigned integral type.

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