簡體   English   中英

如何使用循環和內存集以兩種方式初始化數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM