参考网址:

嵌入式C语言编程时,变量、数组、指针初始化的多种操作

数值初始化

1
2
3
int    inum  = 0;
float fnum = 0.00f;
double dnum = 0.00;

字符初始化

1
char ch = '\0'; 

字符串初始化

实际上就是将字符数组中的字符都初始化为'\0'

1
2
3
4
5
6
7
8
9
10
11
// 使用""实现
char str[10] = "";
// 使用memset
char str[10];
memset(str, 0, sizeof(str));
//使用循环
char str[10];
for(int i = 0; i < 10; i++)
{
str[i] = '\0';
}

一般使用memset最合适,一般采用+1的方式参考:

1
2
3
char year[4+1];
memset(year, 0, sizeof(year));
strcpy(year,"2018");

指针初始化

需要使用malloc申请动态内存

1
2
3
4
5
6
7
8
9
10
11
12
char *p = NULL;  
p=(char *)malloc(100);
if(NULL == p)
{
printf("Memory Allocated at: %x\n",p);
}
else
{
printf("Not Enough Memory!\n");
}
free(p);
p = NULL; //这一行给指针置空必不可少,否则很可能后面操作了这个野指针而不自知,从而导致出现严重的问题

结构体初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
typedef struct student
{
int id;
char name[20];
char sex;
}STU;
STU stu1;
memset((char *)&stu1, 0, sizeof(stu1));
// struct tm * tmp_time;
// memset(tmp_time, 0, sizeof(struct tm));
// task_send_data task_data;
// task_rcv_data rcv_data;
// memset(&task_data, 0, sizeof(task_data));
// memset(&rcv_data, 0, sizeof(rcv_data));

注意初始化结构体数组时

1
2
3
4
5
STU stus[10];
memset((char *)&stus, 0, sizeof(stus)); //正确,数组本身在内存里就是连续的,sizeof取出的就是数组的字节长度
memset((char *)&stus, 0, sizeof(STU)); //错误,只会初始化第一个STU结构体,后面还有9个STU元素并未初始化
memset((char *)&stus, 0, sizeof(STU)*10); //正确,效果与第一个是一样的
memset((char *)&stu1, 0x00, sizeof(stu1)); //正确,效果与第一个是一样的