- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第2讲自己动手学习单片机系列讲座-C语言回顾
第2讲 C语言回顾(ATmega) 青岛科技大学 王泽华C的变量 变量的声明 type name; type通常是以下类型 char,int和double char 类型变量 char a = ‘A’; //存储A的ascii码0x41到8bit的内存中。 char a = 0x41;//存储0x41到8bit的内存中。 运行以下程序观察其输出 #include stdio.h int main(void) { char a = A; char b = 0x41; printf(%c\t%c,a,b); return(0); } 输出为 A A 限定符号signed和unsigned的作用 char 等价与signed char 二者都表示有符号数 运行以下程序观察其输出 #include stdio.h int main(void) { char a = 129; signed char b = 129; unsigned cha c = 129; printf(%d\t%d\t%d,a,b,c); return(0); } 输出为 -127 -127 129 从另一个方面说明C不检查这类错误。 int 类型变量 都占用2字节,默认是signed除非前面带有unsigned限定符。 限定符long long int占用4字节,默认是signed除非前面带有unsigned限定符。 long long int占用8字节,默认是signed除非前面带有unsigned限定符。 float和double 类型变量 浮点类型,两者表示的浮点数范围有区别,单片机在进行浮点类型计算时,会占用大量内存,所以浮点类型数值计算慎用。以后还会谈到如何在有限精度下处理浮点数。 限定符const const通常用于变量类型前面,告诉编译器,该变量是一个常数,程序中不允许修改。例如 const double PI=3.1415926; 如果后面再修改PI=3.14;编译器将给出错误提示。 限定符volatile valatile告诉编译器该变量是易变的。例如程序员想每隔1s让led亮100ms char rFlag = 0;//错误的写法------------改为 volatile char rFlag = 0; ISR(TIMER0_OVF_vect) { … rFlag = 1; } Int main() { … if(rFlag == 1) { ledOn(); _delay_ms(100); rFlag = 0; } } 在宣布了rFlag变量后,rFlag占用内存一个字节,并初始化为0,为加快程序的运行,在用到该变量时,该变量被加载到cpu的寄存器中,因为主程序没有改变rFlag的值,所以优化的时候不会重新去到内存中再读该变量,结果你会发现灯永远也不亮;但是在中断中确实改变了内存中该变量的值(改为1)。若加上volatile告诉编译器,遇到rFlag变量老老实实的到内存中重新读取该变量的值。 数组和指针 一维数组的声明和初始化 type name[]; 声明的同时可以初始化,例如 int a[] = {2,4,6,8,10}; 或者 int a[5] ; for(i=0;i5;i++) a[i] = (i+1)*2; 错误的初始化 int a[5] ; a[] = {2,4,6,8,10}; 一维数组的地址 由于是整形,所以每个值占2byte,一共占用10byte连续存储区,其地址分别是a[0], a[1], a[2], a[3], a[4]。若使用数组名字a,则表示数组的首地址,即a等价于a[0]。 指针(指针指向数组的取值及其地址+1的运算) 可以定义一个指向数组的指针 int *pi; pi = a;//表示pi是一个指针,该指针指向数组a的首地址。 实验以下程序 #include stdio.h int main(void) { int i; int a[] = {2,4,6,8,10}; int *pi; double b[]= {1.0,3.0,5.0,7.0,9.0}; double *pd; pi = a; pd = b; printf(int\t address\t double\t address\n); for(i = 0; i
文档评论(0)