资源描述:
《c语言 指针总结》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
c语言指针总结第八章:指针知识结构:1)指针的基本概念2)怎么定义指针3)指针的运算1)指针的基本概念内存:以字节为单位,由若干个字节组成为了便宜管理,给每个字节编号(十六进制)每一个字节的编号在整个内存都是唯一定义变量:在计算机内存中去预定内存各类变量所预定的空间大小不同整型:intTC2字节VC4字节longTC4字节VC4字节shortTC2字节VC2字节实型:floatTC4字节VC4字节字符型:charTC1字节VC1字节变量的地址,指向变量的指针用来存储变量地址的变量,指针变量指针变量只能存储地址,类型必须要一致才能存储scanf(2)定义指针变量inta,b;int*p,*q;类型名*指针变量名1,*指针变量名2...类型名14 :该指针变量的基本类型,只能存储对应类型变量的地址*:指明该变量是一指针类型的变量(只能存储地址)float*ft1,*ft2;double*db1,*db2;指针变量名:不包括*号怎么样去访问变量的内容:1)拿到该变量的地址,直接对该地址进行访问2)通过指针变量来间接访问存储单元怎么样给指针变量赋值:inta,b;int*p,*q;获取变量的地址:可以用取地址运算符(&),将变量的地址取出&:将指定变量的首字节的编号拿到得到指定变量的地址p=&a;:将a的地址取出存储到指针变量p中通过p可以间接访问变量ap就是指向变量a的指针q=&b;注意:指针变量的类型必须和变量的基类型是一致才能存储q=10;/*指针只能存储地址值*/inta,b,*q,*c,*p;p=&a;q=&b;c=p;/*将p中的内容取出,赋值给指针c,使指针c和指针p同时指向p所指向的变量*/14 可以让指针不指向任何存储单元:int*p;p=NULL;P=0;P=‘\0’;上面三种方式,都可以使指针p没有指向inta,*p;int**q;/*指向指针的指针变量*/p=&a;q=&p;指向指针的指针变量:基本类型**指针变量名1,**指针变量名2...只能存储指针变量的地址,指向的是指针用指针怎么样来访问变量:*指针变量名;*:运算符将指针所指向的变量内容访问出来inta,*p;a=10;p=&a;a*pinta,*p,**q;a=10;p=&a;q=&p;a*p**q&*都是单目运算符左边必须是一个变量名,不能表达式或常量左边必须能够代表一个唯一的存储单元地址错误赋值表达式:(A+B)=1010=10百度搜索“就爱阅读”,专业资料、生活学习,尽在就爱阅读网92to.com,您的在线图书馆!从键盘上输入两个整数,然后输出14 *:定义语句中出现时,表示该变量是一个指针变量执行语句中出现时,代表间接访问指针变量所指向变量的值#includevoidmain(){inta,b,*p=&a,*q,*c,d;q=&b;c=&d;*c=*p;scanf(printf(}1020a=10,b=20Pressanykeytocontinue1)指针变量在定义时就可以给其进行初始化操作*:定义语句中出现时,表示该变量是一个指针变量执行语句中出现时,代表间接访问指针变量所指向变量的值2)凡是出现&a地方,都可以指针p去代替3)凡出现a的地方,都可以用间接访问指针去代替(*p)指针:为操作存储单元提供一种间接的访问方式直接访问变量名属于直接操作2.交换a,b两个变量的值(指针来操作)#includevoidmain(){inta,b,*p=&a,*q=&b,t;scanf(p,q);printf(t=*p;*p=*q;/*将指针变量q所指向变量的值取出来赋值给指针变量p所指向的存储单元中*/*q=t;printf(}102014 1)a=10,b=202)a=20,b=10Pressanykeytocontinue3.输入两个数,找出最大值(用指针来操作)#includevoidmain(){inta,b,*p=&a,*q=&b,*max=NULL;scanf(p,q);if(*p>*q)max=p;//使指针max和指针p指向同一个变量elsemax=q;printf(*max);}9050max=90Pressanykeytocontinue#includevoidmain(){inta=10,*p,**q;p=&a;q=&p;printf(}a=10,a=10Pressanykeytocontinue单目运算符:1)!逻辑非2)+正号3)-负号4)++自增5)--自减6)&取地址7)*间接访问8)(类型名)强制类型转换平级:结合性右结合(从右到左的运算顺序)运算过程中:先按优先级别去运算,同级的按结合性去运算inta,*p;p=&a;14 *p*(&a)ainta=10,*p=&a;(*p)++*p++10&a+1*210p=p+1;1:一个存储单元(针对与不同类型的变量,1所代表的字节数有所不同)移动两个字节(TC环境)inta,*p;p=&ap++表达式的值:&ap不再指向a变量,而指向a所代表存储单元的后两个字节的地方++p表达式的值:&a+1*sizeof(int)sizeof(基本类型关键字):返回是指定的类型百度搜索“就爱阅读”,专业资料、生活学习,尽在就爱阅读网92to.com,您的在线图书馆!在当前环境中所占的字节数指针可以和整数进行运算可以代表一个地址(某一个字节的编号)inta;doubleb,*p;p=&b;p=&a;/*错误*/p+1表示p指针所指位置的下一个位置p+1&b+1*sizeof(double)&b+1*8p+5&b+5*sizeof(double)&b+5*8p++p=p+1要让指针重新定位指向,需要重新各其赋值14 指针的移动,必须针对一片连续的存储单元才有意义对于单个变量来说,指针的移动将让没有办法控制指针#includevoidmain(){inta,*p;a=10;p=&a;printf(a=10;p=&a;printf(a=10;p=&a;printf(a=10;p=&a;printf(}10101111Pressanykeytocontinue1011Pressanykeytocontinuea=10(*p)++10*p=11(a)++10a=11a=10;p=&a;*p++p++&ap=&a+1*sizeof(int)*(&a)10*pi=1a=i++a=ii=i+1++ii=i+1a=ia=10,*p,*qp=&a;q=p++q=pp=p+1q=++pp=p+1q=pb=(*p)++b=*p*p=*p+1b=++(*p)*p=*p+1b=*pb=*p++b=*(p++)b=*p++b=*pp=p+114 第八章:指针021.指针的概念地址2.指针变量定义指针变量的赋值inta,b,*p,*q,*k;p=&a;q=p;k=NULLk=0k=‘\0’3.指针的运算(*p)++++*p*p++inta=1,b;b=a++b=aa=a+1b=++aa=a+1b=ainta,*p,*q;p=&a;q=p++q=pp=p+1q=++pp=p+1q=pinta,*p,*q;p=&a;p+1inta=10,b,*p=&a;b=(*p)++b=(*p)*p=*p+1b=++(*p)*p=*p+1b=*pb=*p++b=*pp=p+1b=*(++p)p=p+1b=*p百度搜索“就爱阅读”,专业资料、生活学习,尽在就爱阅读网92to.com,您的在线图书馆!4.指针变量作为函数的形参从被调用函数向调用函数返回参数时:1)return返回一个参数14 2)用指针变量作为形参来间接操作实参的值3)通过全局变量来实现输入两个整数,然后对其值进行交换#includevoidmain(){inta,b,t;scanf(&a,&b);printf(t=a;a=b;b=t;printf(}从函数的角度:#includevoidjh(inta,intb);voidmain(){inta,b;scanf(printf(jh(&a,&b);printf(}voidjh(int*x,int*y){intt;t=*x;*x=*y;*y=t;}10201)a=10,b=203)a=20,b=10Pressanykeytocontinue10201)a=10,b=202)a=20,b=103)a=10,b=20Pressanykeytocontinue求出1--10之间的奇数之和和偶数之和要求,偶数之和用return返回,奇数之和用指针间接操作#includevoidmain(){14 intossum,jssum=0;ossum=qh(10,&jssum);printf(}intqh(intn,int*p){inti,os=0;for(i=1;ios=os+i;else*p=*p+i;returnos;}输入三个整数,然后通过指针变量作为形参的方式找到最大值并输出#includevoidmain(){inta,b,c,max;scanf(&a,&b,&c);findmax(a,b,c,&max);printf(}voidfindmax(inta,intb,intc,int*p){*p=a;if(*pif(*p105069max=69Pressanykeytocontinue输入a,b,c然后按由大到小的顺序输出,要求单独定义一个pax来操作#includevoidmain(){inta,b,c;scanf(paxu(&a,&b,&c);printf(}voidpaxu(int*a,int*b,int*c){intt;百度搜索“就爱阅读”,专业资料、生活学习,尽在就爱阅读网92to.com,您的在线图书馆!if(*a{t=*a;*a=*b;*b=t;}14 if(*a{t=*a;*a=*c;*c=t;}if(*b{t=*b;*b=*c;*c=t;}}voidjh(int*x,int*y){intt;t=*x;*x=*y;*y=t;}102030a=30,b=20,c=10Pressanykeytocontinue求出1+2+3+4+5的和(用指针变量作为形式参数)#includevoidqh(intn,int*p);voidmain(){intsum=0;qh(5,&sum);printf(}voidqh(intn,int*p){inti;for(i=1;iPressanykeytocontinue作业:1.求出200-300之间所有素数之和和非素数之和(素数之和用return返回,非素数之用指针变量作为形参返回)2)指针变量作为操作实参交换:#includevoidmain(){inta,b,*p=&a,*q=&b;scanf(p,q);printf(jh(&p,q);printf(}voidjh(int**x,int*y){intt;t=**x;**x=*y;*y=t;}10201)a=10,b=202)a=20,b=1014 Pressanykeytocontinue总结:1)实参是普通变量时,形参必须是同类型的普通变量形参的改变不会改变实参2)实参是普通变量的地址时,形参数必须是同类型的指针变量形参可以间接的操作实参的内容实参是普通变量的地址时:可以是用&变量名可以是用一个指向其的指针变量3)实参若是一个指针变量的地址时,形参只能是指向指针的指针变量4)实参和形参的个数,类型必须一致5.指针变量作为函数的实参6.函数返回的是指针类型定义一个函数的基本:函数返回值类型函数名(类型名形参名1,类型名形参名2...){}函数返回值类型:类型说明关键字*指针变量:关键字*变量名1,*变量名2...在三个数中查找最大值要求用一个独立函数来查找,并返回最大值的地址#include14 int*findmax(inta,intb,intc);voidmain(){inta,b,c,*p;scanf(p=findmax(a,b,c);printf(}int*findmax(inta,intb,intc){intmax,*q=&max;百度搜索“就爱阅读”,专业资料、生活学习,尽在就爱阅读网92to.com,您的在线图书馆!*p=a;if(*p102030max=30Pressanykeytocontinue第九章:数组一维数组二维数组多维数组赋值插入删除查找逆序统计1020.3‘a’学生成绩:学号姓名语文数学英语化学物理XK001张三丰2030405060计算机存储数据的方式:1)顺序存储:逻辑上相邻的数据存储在相邻的存储单元中优势:1)查找比较方便(访问变量时比较容易)A1=1001&A5=&a1+(5-1)*sizeof(int)&An=&a1+(n-1)*k&An=&ai+(n-i)*sizeof()随机访问方式,来反问各元素14 2)对空间的理由效率比较高缺点:1.插入或删除元素时需要移动大量的元素位置2.空间固定,扩展性不好2)链式存储优势:1.插入和删除元素时不需要移动大量的元素2.空间不受限制缺点:1.查找不方便顺序访问元素的方式2.花费空间比较大3)索引存储百度搜索“就爱阅读”,专业资料、生活学习,尽在就爱阅读网92to.com,您的在线图书馆!14