- 1、本文档共95页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章指针分析
程序设计基础 第八章 指 针 1 指针的基本概念 2 指针与数组 3 指针与函数 1 指针的基本概念 1 指针的基本概念 指针变量的定义 说明: (1)标识符:就是指针变量名。“*”表示其后的名字是一个指针变量名。 例如:int *p; float * q; char* s; (2)数据类型:实际上是指针变量指向的存储单元中数据的类型,即所指向的变量的数据类型。 指针变量的赋值与初始化 对指针赋值,可以通过指针的初始化和赋值表达式语句来实现。向指针赋值时,所赋的值必须是地址量或常量,通常是一个已定义变量所占内存的地址,且变量的数据类型必须与指针变量的数据类型一致,即指针只能指向和它具有相同数据类型的变量。 指针变量的赋值与初始化 对指针赋值,可以通过指针的初始化实现,也可以在程序中通过赋值表达式语句来实现。向指针赋值时,所赋的值必须是地址量或常量。 ③指针的相减 地址计算规则:两个指针做相减运算其结果是一个整数,它是两个指针所代表的内存地址位置之间的数据的个数。 通常指针p和q相减可通过下列公式得出结果: p-q=((p)-(q))/(数据长度) 例如:(2008-2002)/2=3 指针的关系运算表示它们所指向的同一数据类型变量在内存中的位置关系。 设有: int *p,*q; 则指针p和q的关系运算及在内存中的位置关系如下: 指针类型转换 指针的强制类型转换 (数据类型 *)p; 表示对已定义的指针变量p进行强制类型转换,产生一个新的临时指针,所指向的地址就是p所指的地址,而p保持不变。例题P197 void类型指针 在定义指针时可以用void将指针定义为空类型,即不指定指针指向一个确定的类型 void *p; 任何类型的指针都可以赋给指向void类型的指针 指向void类型的指针也可以赋给任何类型的指针 2 指针与数组 2.1 指向数组的指针 2.2 指针与字符数组 2 指针与数组 指针变量既然可以指向变量,当然也可以指向数组和数组元素。 2 指针与数组 指针变量既然可以指向变量,当然也可以指向数组和数组元素。 2 指针与数组 在C语言中,a[i]也是一个运算表达式,其运算符就是下标运算符[],也称为访问数据运算,它是第一优先级的运算。访问数据运算表达式的一般形式是: 地址量[整数i] 其含义是访问以地址量为起点的第i个数据。 2 指针与数组 从地址的角度来看: 3.3 指针作为函数的返回值 格式: 数据类型 *函数名(形参列表) { 函数体; } 数据类型是指返回的指针所指向的数据类型 见P211页例8-14 3.4 指向函数的指针 函数指针:函数的入口地址,用函数名表示,即函数名是一个指针常量。定义一个指针变量存储函数指针,称为指向函数的指针变量,可实现函数调用。 声明格式: 数据类型 (*指针变量名)(形参列表); 数据类型:是指针变量所指向的函数返回值的类型。 例 float (*p1) (int x,int y); float *p2(int x,int y); 4 指针数组与数组指针 4.1 多级指针与指针数组 4.2 指针与多维数组 4.3 数组指针 一系列有序指针变量的集合组成了指针数组。指针数组中的每个元素都是指针变量,并且它们具有相同的存储类型和指向相同的数据类型。与普通数组一样,在使用指针数组之前,必须先对其定义。指针数组的定义形式为: 数据类型 *指针数组名[元素个数]; 指针数组名就表示该指针数组的存储首地址。 例:① int *p[2]; ② int a, *p, b[10], *p1[3]; #include stdio.h void main( ) { char a[ ]=computer,b[ ]= hardware; char c[ ]= software, *p[4];int i; p[0]=a; p[1]=b; p[2]=c; p[3]=NULL; //或p[3]=0; for(i=0;p[i]!=NULL;i++) printf(%s\n,p[i]); } 指向数组的指针被称为数组指针,使用数组指针能很方便地处理二维数组。数组指针的说明形式如下: 数据类型 (*指针名)[元素个数]; 例如:int (* p)[3]; 注意: ①*p两侧的括号一定不要漏掉。 ②p是一个行指针,它只能指向一个含若干元素的一维数组(其
文档评论(0)