C语言编程基础培训教材
发布时间:2021-03-30 来源:文档文库
小
中
大
字号:
希望对大家有所帮助,多谢您的浏览!
目录
1.简单就是美 2. sizeof 3.字节序 4.函数参数 5.返回值
6.强制类型转换 7.swith case 8.字符串 9. 资源释放 10. if规范
11. 临界资源保护
1.简单就是美
优先级搞不清楚用括号
复合语句太罗嗦,拆成几行来写 编码的三不原则
不要挑战自己的记性 不要挑战自己的耐心 不要挑战编译器的水平 编码的三用原则
能用简单句的,就不要用复杂的技巧 能用成熟代码的,就不要再来一套 能用上工具的,就一定要机械化 Struct xxx {
char cA; short sB; long lC; }
void main( {
char *pchar;
pchar = (char *malloc(7; /* 1—魔鬼的数字;2—申请失败后怎么办? */ mencpy (pchar, “abcdefgh”, sizefo(xxx; /* 3—内存 */ printf(“%s\n”, pchar; /* 缺少字符串结束符必越界 */ return; /* 5—退出前没有释放内存 */ }
2. sizeof
数据结构是C语言的基础。C语言的灵活性很大,程度上在于其数据结构的灵活性。要用好的数据结构,首先要掌握数据结构的大小的计算,系统的每个数据机构,每个变量都会分配到一个对应的存储空间,这个存储空间的大小就是数据结构的尺寸。 sizeof 为编译时的一元运算符,可用来计算任一对象的大小1 / 13
希望对大家有所帮助,多谢您的浏览!
sizeof 的结果是编译时的常量
sizeof 不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型。如未知存储大小的数组类型,未知内容的结构或联合类型,void 类型等。 3. 字节序 X86系统
void QosConfigPolicy(xxx {
ulDestIP = 从命令行读取用户配置的参数; pQosPoliscy->ulDestIP = ulDestIP; return; }
主机处理
void QosClassify(xxx {
Plp = (IP-S*pData;
If(pQosPolicy->ulDestIP == plp->ulDestIP {
Vos_HTONL(pQosPolicy->ulDestIP; DoSomething(; }
Return; }
由于历史的原因,世界存在两种字节序标准——BigEndian和LittleEndian。Power PC是大头,X86是小头。有些CPU可以通过寄存器设置支持不同的字节序。如MIPS BigEndian——高位在低字节,地位在高字节 LittleEndian——低位在低字节,高位在高字节
e.g.0x345678 大头内存从低到高存放次序 00,34,56,78;小头内存从低到高存放次序 78,56,34,00
字节序问题广泛存在于设备与设备之间,单板与单板之间,单板与底层之间,只要两个处理单元的字节序不同,这个问题就存在。为了解决不同字节序的处理单元之间的同信问题,世界上定义了主机序和网络序的概念,网络序主要用于信息传递,一般不用于计算,其字节顺序与大头一致。
除在编码时紧绷这根弦之外,我们在器件选择是主机序与网络序一致的芯片,同一设备的不同单板使用相同的字节序。并优先选择支持大头的芯片,这样即使不能彻底解决问题,也可以彻底规避问题。 4. 函数参数
C语言中,函数通过返回值和参数与调用者交换信息。函数参数自身占用的存储单元在堆栈中分配。入口参数指向的数组或地址,在函数入口处拷贝到堆栈区中,因此对函数参数所在存储单元的直接修改不会作用到函数之外,而对参数存储单元中存放的地址指向的存储空间的修改,则会在函数之外起作用。调用者在进行函数调用之前,必须事先申明被调用函数的原型,包括返回值类型和参数类型。 CHAR *GetMemory(CHAR *p {
/* 申请内存 */ 2 / 13
希望对大家有所帮助,多谢您的浏览!
P = (CHAR *malloc(100; Return p;
}
Malloc 申请的内存空间与操作系统有关,在PC中molloc申请空间以byte为单位,如申请100个int内存则 p=(INT *malloc(400; VOID Test(void {
CHAR *str = NULL;
If(NULL != GetMemory(&str {
Strcpy(str, ”hellworld”; Print(str; Free (str; Str = NULL; Return; }
5. 返回值
C语言中,函数的调用者通过返回值了解函数的执行情况,函数缺省的返回值类型为int,编程规范要求必须显示定义函数的返回类型。对于反映了函数执行状态的返回值,调用者必须依据返回值进行相应的处理,尤其是对于函数执行异常的情形。函数的出口参数能够起到与返回值类似的作用,上一条同样适用于出口参数。 对于函数返回值为恒值得函数,建议使用void返回值 #include “stdio.h” Void main( {
Char *p;
P = (char *malloc(100;