如何使用循环和内存集以两种方式初始化数组?
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);
帮助您入门的几点:
- 您正在尝试将所有项目设置为
0
。 Scanf
要求您输入所有值。这不是必需的,因为您可以将它们设置为 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
。但正如其他用户所注意到的那样,这恰好在大多数硬件上都是如此。
我正在尝试回答我的 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);
帮助您入门的几点:
- 您正在尝试将所有项目设置为
0
。Scanf
要求您输入所有值。这不是必需的,因为您可以将它们设置为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
。但正如其他用户所注意到的那样,这恰好在大多数硬件上都是如此。