- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章 指 针
学习和解题要点
内存空间和地址:C程序中定义的任何类型的变量,相当于在计算机内存中开辟存贮空间。
每个空间除了有名称(变量名)可放什么样的数值类型之外,还有一个地址的概念。如:
int i,j “为可放整型的名叫i和j的变量,则它们的地址分别为i,j。
一维数组的名称(数组名)即为地址,如int a[20]则a即为地址,也代表第一个元素a[0]的地址a[0],二维数组的int b[3][4];数组名b也是地址,但它不能代表第0行第0列元素的地址。
对二维数组这里有二个层次的地址概念。二维数组b可以看成三个一维数组组成,它们的名称分别为b[0],b[1],b[2]。它们分别是b[0][0],b[1][0] ,b[2][0]三个第一个元素(每个是一个整数)的地址。
这时b可以看成大元素的(每个元素为4个整数)的数组的地址了,因此b就不是简单的一个整数的地址,也就是说b(也可写成b+0)代表了b[0]的地址,b+1代表了b[1]的地址。
bb[0]b[1]b[2]以上讲的地址 i,b[0],b等都是常量,称为地址常量,一当定义就不可以再变的。
2.指针变量:简单地说就是放地址的变量,它是内存中一个空间,不放数据专放地址,不同时候可放不同地址,因此不是如前的地址常量而是可变的变量。
指针变量的定义如:有定义int i,*p;p是一个变量的名称,但它不是一般的变量而是有个* 特别标明以示与i的区别。因此这里 * 是一个记号表示p与i不同,是指针变量。p可以放一个地址数但又不是任何的地址数,只可放整型数的地址,如p=i;因此int *p有三个意义:①说明p是变量名,②有 * 说明p是指针变量名,③说明p只能放整型数的地址。
3.对指针变量的操作
赋值操作:通过求地址运算符 求出存储单元地址,赋给指针变量,或把一维数组名赋给指针变量如:
int i,a[10],*p,*q;可以 p=i 或 p=a;p=a[0] 等,
二个指针变量之间赋值:q=p 表示q与p指向同一个地方,或该q跟着p指。
─→
i
i
p
─→
p
a
q↑
当指针变量指向数组后,对指针变量可以比较和加减整数的运算。表示指针变量指向数组元素的前后和在数组元素上移动。
4.取指针所指的空间
指针运算符*表示取出指针所指的空间(变量或数组元素)如int i=3,*p;p=i则 *p即i,用 *p输出时即为3。又如int a[4]={10,11,12,14},p=a,则*p即为a[0]为10。
指向动态分配的空间
C语言有一个函数malloc可在程序运行时动态的分配空间,其用法为:
p=(类型名 *) malloc (sizeof(类型名))。表示由sizeof(类型名)测出该类型所需的字节数,malloc申请这么多字节,同时把它强制类型转换成(类型名 *)地址。p是指针变量,就指向这个地址。当然p应预先定义成这个类型的指针变量。
6.指向一维数组的指针的使用
当指针指向一维数组如:int *p,a[10];p=a;后,则p即与a等效,可用p[0],p[1],...,p[9]与a[0],a[1],...a[9]代表下标元素。也可用*p ,*(p+1)...*(p+q)与*a,*(a+1),...*(a+9)代表下标元素。另外,与a不同的是?p可以为p=p+1或p++运算表示p在数组元素上“移动”。
指向二维数组的指针的使用
变通的指针变量(我们称之为“小”指针),如int b[3][4],*p可以用来指向二维数组,这时把二维数组看成几个一维的数组一个一个的处理才可以。如p=b[0]或p=*b,p=b[1]或p=*(b+1),这里不能写成p=b或p=b+1。 *(b+1) 与b+1是地址相同概念不同的。
b+1代表第1行的地址,我们可称“行地址”,而*(b+1)是第一行第0列元素的地址,我们可称“元素地址”,由于p是小指针因此只能用来指向元素地址 *(b+1),而不能指向b+1。这样取第j个元素可用 *(p+j),或 *(p+i*4+j)或 *p++等。不能用*(*(p+i)+j),p是小指针,+i只是走过i个元素而不是走i行。
专门指向数组的指针,我们称之为“大”指针,如int (*p)[4],int b[3][4];可以用来指向二维数组的整个一维如 p=b,p=b+1,而(*p)[j]表示该行第j个元素了。另外还可以用p+i表示移i行,*(p+i)表示该行首元素地址 **(p+i)表示该行首元素值,*(p+i)+j表示在该行位移j地址,*(*(p+i)+j)表示该行第j个元素值。
─→
p
b+i
─→
q
─→
p
i
指针数组和多维指针
当定义成int *p[
您可能关注的文档
最近下载
- 金属工艺学 全套课件.ppt VIP
- 外研版(三起)(2024)三年级下册英语Unit 4《What’s your hobby?》第1课时教案 .pdf VIP
- Unit 4 What's your hobby 第三课时教案 2024-2025学年度 外研版英语三年级下册.docx VIP
- 老年患者麻醉管理专家共识.pptx
- 景区运营管理合作协议.doc VIP
- HGT21629-2021管架标准图图集标准.docx VIP
- 保健食品要掌握的全部基本知识【58页】.pptx VIP
- MDCG 2020-7 上市后临床随访 (PMCF) 计划模板中文版.docx VIP
- 基坑土方回填施工策划方案.doc VIP
- 半导体材料课件课件.pptx VIP
文档评论(0)