CPP中数组初始化方法
简单的初始化:
利用定义变量时赋初值进行初始化。
int a[10] = {0};
float f[10] = {0.0};
char ch[5] = {'/0'};
大括号中的为初始值。
较为复杂的初始化:
利用memset函数初始化。
memset函数用法: void *memset(void *s,int c,size_t n)
将已开辟内存空间 s 的首 n 个字节的值设为值 c
例1:char str[100];
memset(str, 0, 100);
例2: int a[10];
memset(a, 0, sizeof(a));
例3: char a[10];
memset(a, '/0', sizeof(a));
memset可以方便的清空一个结构类型的变量或数组.
例:
struct stu
{
char Name[16];
int num;
int score;
};
main()
{
.......
.......
struct stu Test;
.......
}
则 Test.Name Test.num Test.score的初始化为
简单的:
Test.Name = {'/0'};
Test.num = 0;
Test.score = 0;
用memset:
memset(&Test, 0, sizeof(struct stu));
如果Test是数组Test[5],则这样初始化
memset(Test, 0, sizeof(struct stu) * 5);
memset总结:
作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清零操作的一种最快方法。
}
相关的问题(转):
如下demo是可以的,能把数组中的元素值都设置成字符1:
#include
#include
using
int
{
}
而,如下程序想吧数组中的元素值设置成1,却是不可行的:
#include
#include
using
int
{
}
1.因为第一个程序的数组a是字符型的,字符型占据内存大小是1Byte,而memset函数也是以字节为单位进行赋值的,所以你输出没有问题。而第二个程序a是整型的,使用memset还是按字节赋值,这样赋值完以后,每个数组元素的值实际上是0x01010101即十进制的16843009。你看看你输出结果是否这样?
2.如果用memset(a,1,20);
就是对a指向的内存的20个字节进行赋值,每个都用ASCII为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起就是100000001000000010000000