C51数组、指针及运算基础2011年2月本课题的目标学习完本课题后,您将能够:1.清楚C51程序中数组的使用。2.清楚C51程序中指针的概念及应用方法。3.清楚C51基本的运算符号及基本运算功能。本课题的要求本课题教学完成后,初学者必须做到:1.牢记C51程序中一维与二维数组的使用方法。2.牢记C51程序中基本的运算符号及运算功能。3.牢记C51程序中指针变量的定义、引用方法。本课题讲解内容1.C51的数组2.C51的指针3.C51运算基础单片机技术应用基础理论讲解进程参考1单片机技术应用基础理论本课题笔记一、C51的数组1.C51的一维数组(1)一维数组的定义:类型说明符数组名[整型表达式];例:charch[5];注:[]内只能是确定的数据(整型数据或整型表达式),不能是变量。(2)一维数组的初始化:1)定义时初始化例:inta[5]={1,2,3,4,5};等价于:a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;注:全部赋值可省略长度例:inta[]={1,2,3,4,5,6};2)定义时部分初始化例:inta[5]={1,2,3};等价于:a[0]=1;a[1]=2;a[2]=3;a[3]=0;a[4]=0;(3)一维数组的引用:数组名[下标]例:ch[0]、ch[1]、ch[2]、ch[3]、ch[4]注:下标从0开始到n-1,不能越界,下标可以是变量。例:ch[i];2.C51的二维数组(1)二维数组的定义:类型说明符数组名[整型表达式1][整型表达式2];例:charch[3][2];元素个数=行数*列数,3行2列,共6个数组元素。(2)二维数组的引用:数组名[下标1][下标2]注:内存是一维的,数组元素在存储器中的存放顺序按行序优先,即“先行2单片机技术应用基础理论后列”。(3)二维数组的初始化:二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值,也可按行连续赋值。例如:数组a[5][3]1)按行分段赋值可写为inta[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};2)按行连续赋值可写为inta[5][3]={80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};3.C51的字符数组用来存放字符量的数组称为字符数组。例如:charc[10];用字符串的方式对数组作初始化赋值。例如:charc[]={'c','','p','r','o','g','r','a','m'};可写为:charc[]={Cprogram};或去掉{}写为:charc[]=Cprogram;用字符串方式赋值比用字符逐个赋值要多占一个字节,用于存放字符串结束标志'\0'。上面的数组c在内存中的实际存放情况为:Cprogram\0`\0'是由C编译系统自动加上的。由于采用了`\0'标志,所以在用字符串赋初值时一般无须指定数组的长度,而由系统自行处理。二、C51的指针指针是一个特殊的变量,它里面存储的数值是内存里的一个地址。指针变量:存放变量地址的变量1.指针变量定义的一般形式:数据类型说明符[存储器类型]*指针变量名;数据类型说明符说明了该指针变量所指向的变量的类型。例:int*pointer;//定义一个指向整型变量的指针变量pointer3单片机技术应用基础理论注意:指针变量名前的“*”号表示该变量为指针变量,但指针变量名应该是pointer而不是*pointer。2.指针变量的操作&——取地址运算符。*——指针运算符,取指针所指向变量的内容。例:inta=2;int*i_pointer=&ai_pointe-----指针变量,它的内容是地址量&a---变量指针,就是变量a的地址*i_pointer----指针的目标变量,它的内容是数据,即变量a的值23.指针变量的运算指针变量的赋值运算:p=&a;(将变量a地址给p)p=array;(将数组array首地址给p)p=&array[i];(将数组元素地址给p)p1=p2;(指针变量p2值给p1)不能把一个整数给p,也不能把p的值给整型变量指针的算术运算:P+i等价于p+(i*d)(i为整型数,d为p指向的变量所占字节数)p++,p--,p+i,p-i,p+=i,p-=i等例:p指向int型数组,且p=&a[0];则p+1指向a[1]4.指针与一维数组的关系int*p与intq[10]数组名是指针(地址)常量p=q;p+i是q[i]的地址数组元素的表示方法:下标法和指针法,即若p=q,p[i]⇔q[i]⇔*(p+i)⇔*(q+i)则4单片机技术应用基础理论形参数组实质上是指针变量,即intq[]⇔int*q在定义指针变量(不是形参)时,不能把int*p写成intp[];系统只给p分配能保存一个指针值的内存区(一般2字节);而给q分配2*10字节的内存区。5.指针与字符数组的关系char*cp;与charstr[20];str由若干元素组成,每个元素放一个字符;而cp中存放字符串首地址charstr[20];str=“IloveChina!”;(⨯)char*cp;cp=“IloveChina!”;(⎫)str是地址常量;cp是地址变量cp接受键入字符串时,必须先开辟存储空间例charstr[10];scanf(“%s”,str);(⎫)而char*cp;scanf(“%s”,cp);(⨯)改为:char*cp,str[10];cp=str;scanf(“%s”,cp);(⎫)三、C51运算基础1.算术运算+加-减*乘/除%取模2.逻辑运算&&逻辑与||逻辑或!逻辑非3.关系运算小于大于=小于等于=大于等于==测试等于!=测试不等于4.位运算&按位与|按位或^按位异或5单片机技术应用基础理论~按位取反位左移位右移5.自增减运算++i,--i在使用i之前,先使i值加(减)1。i++,i--在使用i之后,再使i值加(减)1。6.赋值运算=赋值运算+=加后赋值-=减后赋值*=乘后赋值/=除后赋值%=取模后赋值=左移后赋值=右移后赋值&=按位与后赋值^=按位异或后赋值|=按位或后赋值运算优先级由高到低单目运算符→算术运算符→关系运算符→逻辑运算符→赋值运算符6