- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十章 指针 指针数据类型 (1)指针与地址的概念,地址运算符 (2)指针变量的定义,初始化,指针的运算 (3)指针与数组,指针与结构,指针数组,指针与函数,多级指针 (4)存储区动态分配和释放的函数的应用 (5)指针作为函数参数的应用 引入指针的作用 动态分配内存,直接处理内存地址 有效地表示复杂的数据结构 方便使用字符串,数组 调用函数时能得到多于1个的值 10-1地址和指针的概念 内存单元的地址:内存中每一个字节的编号 内存单元的内容:内存中存放的数据 int i=3,j=6,k=9; 直接访问与间接访问 直接访问:按变量地址存取变量值的方式。 间接访问:将变量地址放在一个变量(指针变量)中,在存取变量时,先到存放变量地址的变量(指针变量)中取出变量的地址,然后再取出变量值 指针:一个变量的地址称为该变量的指针 指针变量:一个变量专门用来存放另一个变量的地址,则称它为指针变量 指针变量指向某变量:某变量的地址赋给 某指针变量 10.2变量的指针和指向变量的指针变量 变量的指针:变量的地址 指针变量:存放变量地址的变量,用来指向另一个变量 10.2.1指针变量的定义 定义的一般形式: 基类型 *指针变量名 int *point1; float *point2; char *point3; 几点注意: 指针变量前的*,表示该变量的类型为指针变量 在定义指针变量时必须指定基类型 指针与目标变量联系在一起,不能自由地如同汇编那样赋予内存地址,而只能赋予一个变量(包括数组)的存储地址,即目标变量的地址。 初始化格式: 数据类型 *指针名=变量名(或一维数组名,或NULL); (NULL在stdio.h,alloc.h等头文件中定义为0或0l) 赋值号右边的变量或数组的数据类型必须与指针数据类型一致,否则编译时会出现警告;初始化为NULL表示"空",即不指向任何目标.如 int a; int *pa=a; float *pf=NULL; 赋值格式: 指针名=变量名(或一维数组名,或NULL); 或: 指针名1=指针名2;(注意指针名前不能再带有 ‘*’号) 如 int a,*pa,*pb,*pa1,b[5]; pa=a,pa1=pa,pb=b; 指针在未被初始化或赋值之前,其指向不定,俗称"野指针",其指向不定,因此不能访问"野指针"的目标,否则可能产生灾难性的后果. 10.2 .2指针变量的引用 与指针变量有关的运算符: :取地址运算符 a:变量a的地址 *:指针运算符(间接访问运算符) *p:指针变量p所指向的存储单元的内容 int i,j; int *point1,*point2; 使指针变量指向另一个变量:赋值语句 point1=i; point2=j; 给指针变量所指向的变量赋值: *point1=3;(i=3;) *point2=4;(j=4;) main() { int a,b; int *point_1,*point_2; a=100; b=10; point_1=a; point_2=b; printf(“%d%d”,a,b); printf(“%d%d”,*point_1,*point_2); } 对*和运算符的几点说明 从*和的含义可见,指针运算符*与取址运算是互逆的,但结果的类型不同: (*p) 结果得到p,此时p只能是指针; *(p) 结果得到p,此时p只能是变量. 由于*与同优先级,自右至左结合,所以上述括号可以省略。 如:point_1=a; *point_1: *point_1就是a,取地址运算后就得到a的地址,就是point_1。 *a:a就是a的地址,也就是point_1,再进行间接访问,就是变量a。 (*point_1)++:a++ *point_1++:由于++与*同优先级,自右至左结合,相当于*(point_1++),又由于++在后是“后加”,故先对point_1进行*运算,得到变量a的值,再将指针变量point_1 加1, point_1不指向a了。 对比*++point_1,先指针变量point_1 加1,再取其中的值。 main() { int *p1,*p2,*p,a,b; scanf(“%d%d”,a,b); p1=a; p2=b; if (ab)
文档评论(0)