在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
笑话一枚: ========================= 我 是 分 割 线 ========================= 前言C语言允许直接访问物理地址,可以直接对硬件进行操作,非常适合开发内核和硬件驱动。 书上看来一句话:普通人用 C 语言在 3 年之下,一般来说,还没掌握 C 语言; 5 年之下,一般来说还没熟悉 C 语言;10 年之下,谈不上精通。 学习一门语言最基本的还是要多码码,多调试,必要的时候可以用小黄鸭调试法。 多思考,遇到问题自己先尝试深入研究和解决。 下面的笔记来自《C语言深度解剖》
变量定义、声明最重要的区别:定义创建了对象并为这个对象分配了内存,声明没有分配内存。
一般的变量使用驼峰命名法(CamelCase),加上必要的前后缀。
c语言有4种存储类型:auto, extern, register, static,定义变量的时候只能指定其中的一种类型。 进程在内存中的结构
也有变量不在内存中:register 变量可能不存放在内存中,所以不能用取址运算符“&”来获取 register 变量的地址。
static的2个作用第一个作用:修饰变量。静态全局变量和静态局部变量,都存在内存的静态区。
sizeof关键字int i=0; 这里只有选项C是错误的,因为 sizeof 在计算变量所占空间大小时,括号可以省略,而计算类型大小时括号不能省略。
signed、unsigned 关键字1.下面的代码输出是什么?为什么? void foo(viod) { unsigned int a = 6; int b = -20; (a+b>6)?puts(">6"):puts("<=6"); }
2.下面的代码的结果是多少?为什么? int main() { char a[1000]; int i; for(i=0; i<1000; i++) { a[i] = -1-i; } printf("%d",strlen(a)); return 0; }
void 的字面意思是“空类型”,void *则为“空类型指针”,void *可以指向任何类型的数据。
case 后面的值只能是整型或字符型的常量或常量表达式。
定义 const 只读变量,具有不可变性。const 修饰的仍然是变量,只不过是只读属性罢了,不能当作常量使用。 const的作用:节省空间,避免不必要的内存分配,同时提高效率
真时假亦真,假时真亦假C语言中,0表示逻辑假,非0表示逻辑真。从数值上看,NULL、 '\0' 和 0 是一样的(注意和 '0' 的区别)。C语言不会黑白不分,只要不是假就是真,但是这样会不会太极端吗?
volatilevolatile修饰的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。 先看看下面的例子: 这时候编译器对代码进行优化,因为在(1)、(2)两条语句中,i 没有被用作左值(没有被赋值)。这时候编译器认为 i 的值没有发生改变,所以在(1)语句时从内存中取出 i 的值赋给 j 之后,这个值并没有被丢掉,而是在(2)语句时继续用这个值给 k 赋值。编译器不会生成出汇编代码重新从内存里取 i 的值,这样提高了效率。
再看另一个例子: 什么时候要使用 volatile ?如果 i 是一个寄存器变量或者表示一个端口数据或者是多个线程的共享数据,就容易出错,所以说 volatile 可以保证对特殊地址的稳定访问。
大小端模式3.确认当前系统的存储模式?int checkSystem{ union check { int i; char ch; }c; c.i = 1; return(c.ch == 1); } 若处理器是 Big_endian 的,则返回 0;若是 Little_endian 的,则返回 1。
大端模式(Big_endian) :字数据的 高字节 存储在 低地址中,而字数据的 低字节 则存放在 高地址中。
4.p->i的值为多少?union { int i; char a[2]; }*p,u; p = &u; p->a[0] = 0x39; p->a[1] = 0x38; union 型的成员的存取都是相对于该联合体基地址的偏移量为 0 处开始的。 5.在 x86 系统下,以下程序输出的值为多少?#include <stdio.h> int main(void) { int a[5] = {1,2,3,4,5}; int *ptr1 = (int *)(&a + 1); int *ptr2 = (int *)((int)a + 1); printf("%x,%x\n",ptr1[-1],*ptr2); return 0; }
结构体struct6.下面2段代码有什么区别?//代码(1) structTestStruct1 { char c1; short s; char c2; int i; }; //代码(2) structTestStruct2 { char c1; char c2; short s; int i; };
sizeof(TestStruct1)的值为 12 sizeof(TestStruct2)的值为 8
可以利用#pragma pack()来改变编译器的默认对齐方式: #pragma pack(n) //n=1,2,4,8,16…
枚举类型enumenum Color { GREEN = 1, RED, //2 BLUE, //3 GREEN_RED = 10, GREEN_BLUE //11 }ColorVal;
函数至少的函数头部// 功 能: 改变缓冲区大小 // 参 数: nNewSize 缓冲区新长度 // 返回值: 缓冲区当前长度 // 说 明: 保持原信息内容不变 完整的函数说明/************************************************************************ * Function Name : nucFindThread * Create Date : 2000/01/07 * Author/Corporation : your name/your company name * * Description : Find a proper thread in thread array. * If it’s a new then search an empty. * * Param : ThreadNo : someParam description * ThreadStatus : someParam description * * Return Code : Return Code description,eg: ERROR_Fail: not find a thread ERROR_SUCCEED: found * * Global Variable : DISP_wuiSegmentAppID * File Static Variable : naucThreadNo * Function Static Variable : None * *------------------------------------------------------------------------ * Revision History * No. Date Revised by Item Description * V0.5 2008/01/07 your name … … ************************************************************************/ static unsigned char nucFindThread(unsigned char ThreadNo,unsigned char ThreadStatus) { // TODO:... } //Blank Line 函数编写的一些注意:
文件文件命名:模块名缩写 + 小写字母名字 文件头部说明/************************************************************************ * File Name : FN_FileName.c/ FN_FileName.h * Copyright : 2003-2008 XXXX Corporation,All Rights Reserved. * Module Name : DrawEngine/Display * * CPU : ARM7 * RTOS : Tron * * Create Date : 2008/10/01 * Author/Corporation : WhoAmI/yourcompany name * * AbstractDescription : Place some descriptionhere. * *-----------------------Revision History-------------------------------- * No Version Date Revised By Item Description * 1 V0.95 08.05.18 WhoAmI abcdefghijklm WhatUDo * ************************************************************************/ #ifndef __FN_FILENAME_H #define __FN_FILENAME_H #endif // Debug Switch Section // Include File Section // Macro Define Section // Structure Define Section // Prototype Declare Section // Global Variable Declare Section // File Static Variable Define Section // Function Define Section
之后的打算:
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论