2020年6月问题汇总

目录

C语言

1. memset函数的使用总结。

1)对数组的初始化

2)对指针所指空间的初始化

3)对结构体的初识化

【注意】:

 2. malloc函数的使用总结。

嵌入式

1. GPIO初始化后,状态要初始化吗?


C语言

1. memset函数的使用总结。

memset函数原型如:

void *memset(void *s, int ch, size_t n);

 函数功能:将s所指向的某一块内存中的前n个字节的内容全部设置为ch指定的ASCII值。

这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针。

常见作用:①结构体②数组的清零。通常初始化为0或者字符'\0'

头文件:

下面为使用例程:

1)对数组的初始化

// 例1:整形数组初始化
int a[10];
memset(a, 0, sizeof(int) * 10);


// 例2:字符数组初始化
char ch[10];
memset(ch,'\0', sizeof(char) * 10);

2)对指针所指空间的初始化

3)对结构体的初识化

 结构体的初始化与数组的初始化类似。

struct sample_struct
{
char csName[16];
int iSeq;
int iType;
};

struct sample_strcut stTest;

memset(&stTest,0,sizeof(struct sample_struct));

//而一般初始化
stTest.csName[0]=’/0’;
stTest.iSeq=0;
stTest.iType=0;

【注意】:

①第一个参数一定要是一个已知的、已经被分配内存的地址,否则会出错。

②第三个参数一定使用sizeof操作符,而不要人为计算填值,因为每个系统下对类型长度的定义可能不一样,得到的长度也就有所差异。

③memset函数是按照字节初始化,如果单字节类型空间,可以任意赋初值,比如char型数组,而对于多字节类型空间,只能初始化为0,不然将会出现初值错误(字节组合起来,能与理想的一样吗?)比如int型(32位,4字节)初值1对应32位16进制0x00000001,而实际拼接起来为0x01010101对应的十进制数(具体多少我就不算了)

 2. malloc函数的使用总结。

 

 

嵌入式

1. GPIO初始化后,状态要初始化吗?

你可能感兴趣的:(嵌入式问题)