- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
9.指针
指针
指针使用灵活、方便,并可以使程序简洁、高效、紧凑。可以说,指针是C语言的精髓。
指针涉及数据的物理存储,概念复杂,使用灵活且容易出错,所以较难掌握。学习指针要抓住基本的概念、多用图示分析问题解决问题。
简单地说,地址(内存空间或变量的)-指针;地址变量-指针变量
变量的地址和指针变量
地址(指针)、地址变量(指针变量)概念及变量的存取方式
内存,内存地址
内存(内部存储器):是由大规模集成电路芯片组成存储器,包括RAM、ROM。运行中的程序和数据都是存放在内存中的。与内存相对的是外存,外存是辅助存储器(包括软盘、硬盘、光盘),一般用于保存永久的数据。一定要记住:程序、数据是在内存中由CPU来执行和处理的。外存上尽管可以保存程序和数据,但是当这些数据在没有调入内存之前,是不能由CPU来执行和处理的。
内存地址:内存是由内存单元(一般称为字节)构成的一片连续的存储空间,每个内存单元都有一个编号。内存单元的编号就是内存地址,简称地址。
CPU是通过内存地址来访问内存,进行数据存取(读/写)。
变量、变量名、变量的地址、变量值
变量:命名的内存空间。变量在内存中占有一定空间,用于存放各种类型的数据。
变量有下面几个概念:
变量名:变量名是给内存空间取的一个容易记忆的名字。
变量的地址:变量所使用的内存空间的地址。
变量值:在变量的地址所对应的内存空间中存放的数值即为变量的值或变量的内容。
指针、变量的指针和指针变量(重点)
指针:就是 “内存单元的地址”。指针指向一个内存单元。
变量的指针:就是“变量的地址”。变量的指针指向一个变量对应的内存单元。
指针变量:就是地址变量。地址(指针)也是数据,可以保存在一个变量中。保存地址(指针)数据的变量称为指针变量。
指针变量p中的值是一个地址值,可以说指针变量p指向这个地址。如果这个地址是一个变量i的地址,则称指针变量p指向变量i。指针变量p指向的地址也可能仅仅是一个内存地址。
指针变量的定义
指针变量的定义格式:
例如:
int *pt1, *pt2; 定义两个指针变量pt1,pt2。基类型为整型,即指向的数据类型为整型。
float *f; 定义指针变量f。基类型为浮点型,即指向的数据类型为浮点型。
char *pc; 定义pc。基类型为字符型,即指向的数据类型为字符型。
指针变量的赋值
指针变量一定要有确定的值以后,才可以使用。禁止使用未初始化或未赋值的指针
将变量的地址赋值给指针变量(指针变量指向该变量)
例如:
int i,*p; p=i;
指针变量的引用
、*运算符。
1、运算符(取地址运算符):表示取变量的地址。
2、*运算符(指针运算符、间接访问运算符):访问指针变量指向的变量的值。
main()
{
int i=100,j=10; /* 定义两个整型变量 */
int *pi,*pj; /* 定义两个整型指针变量 */
pi=i; /* pi-i */
pj=j; /* pj-j */
printf(“%d,%d”,i,j); /* 直接访问变量i,j */
printf(“%d,%d”,*pi,*pj); /* 间接访问变量i,j */
}
结果:
10,100
10,100
说明:
“int *pi,*pj; ”语句定义了两个变量pi,pj是指向整型数据的指针变量,但是没指定它们具体指向哪个变量。
“pi=i; pj=j;”将i,j的地址分别赋值给指针变量pi,pj。也就是说pi,pj分别指向变量i,j。
“printf(“%d,%d”,i,j);”使用变量名i,j直接访问变量i,j,这是我们以前常用的方法。
“printf(“%d,%d”,*pi,*pj);” 使用*pi,*pj访问pi,pj所指向的空间的内容,pi,pj分别指向变量i,j,所以*pi,*pj访问的是变量i,j的值。即使用指针变量pi,pj间接访问变量i,j。“*运算符”是间接访问运算符(与定义时不同,定义指针变量所使用的“*”只表示是指针变量,不是运算符)。
指针变量作为函数的参数
变量可以作为函数参数,指针变量同样可以作为函数参数。
指针变量作为函数参数时,同样是从实参单向传递指针变量的内容给形参,只是传递的内容是一个地址值。可以通过这个地址值间接改变实参、形参所共同指向的变量。所以尽管不能改变实际参数地址本身,但是可以间接改变地址所指向的变量。
例:输入a,b;交换a,b数据后输出
(1)先分析函数参数使用一般变量的情况。被调用函数swap中交换了形参i,j的值,但是因为参数传递是单向的,形参、实参占用的是不同的内存空间,所以在尽管在swap中交换了形参i,j值,实参a,b不会
文档评论(0)