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

时间:2015-01-08 10:12:48

标签: c arrays function 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]);
    }
}

5 个答案:

答案 0 :(得分:2)

有几点可以帮助您入门:

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

memset的

     

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

     

填充内存块设置内存块的前几个num字节   由ptr指向指定的值(解释为unsigned   炭)。

     

参数

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

您应该注意到memset仅适用于字节。因此,您可以使用它将浮点数设置为0,因为它包含全部为0的4个字节,但您无法将其设置为1。但是作为其他用户的通知,这恰好在大多数硬件上都是如此。

答案 1 :(得分:0)

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

可用于将数组的所有元素分配给0

答案 2 :(得分:-1)

  

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

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 :(得分:-1)

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

// 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] {};

答案 4 :(得分:-2)

我认为不需要scanf("%f",&data[count]);,而是可以直接指定data[count]=0;

如果您使用memset()函数,则可以将值直接设置为零到数组memset(data,'0',1000);