



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章 指针1. C是一种具有低级语言功能的高级语言,它的一个重要特点就是允许在程序中引用一个变量的地址。10.1 地址和指针的概念1.内存按字节编号,每个字节的存储空间都有一个“门牌号”地址。地址是一般是32位的二进制数,为了表示方便,我们使用16进制数表示,例如:0x 0000ff1a,或写成 0000ff1aH.2. char 字符型1字节 int 整型量4字节; float单精度型4字节; double双精度型8字节;3. 地址:程序实体(如变量、数组、函数)在内存中占用一定的存储空间,这些空间都有地址。该实体的内存地址就是所占用空间的首地址。4. 指针:一个变量的地址。5. 用于存储指针的变量叫做指针变量。10.2 变量的指针和指向变量的指针变量1. 定义一个指针变量 数据类型 * 指针变量名;例如: char *p; /声明p为指向字符型变量的指针变量int *q; /声明q为指向整型变量的指针变量2.两个运算符: & 和 * &: 取地址运算符*:指针运算符例如:int a; &a 就是变量a的地址*为指针运算符,也叫“取内容运算符”,其运算对象为指针变量int *p;int a=2;p=&a;*p 则表示p所指向的变量,即a;不能写*a,因为a不是指针变量3. 指针变量的间接引用 一个实体可以直接用其标识符指称,也可以使用指向它的指针指称。4. 指针变量作为函数参数 #includevoid main( )void swap(int *p1, int * p2);int a, b;int *pointer_1=&a, *pointer_2=&b;scanf(“%d ,%d”,&a,&b);if(ab)swap(pointer_1,pointer_2);printf(“a=%d,b=%dn”,a,b);10.3 数组与指针1.指向数组元素的指针 例如: int a5; int *p; p=&a0; 如果指针变量已指向数组中的一个元素,则p+1表示此数组中的下一个元素的地址。2. 指针的运算 指针是无符号的整数,是地址,所能进行的运算有很多限制。 1).加/减 法:指针与整数相加、减,表示指针在内存空间上、下移动 int 指针加/减 1,向下/上移动4个字节 float 指针加/减 1,向下/上移动4个字节 char 指针加/减 1,向下/上移动1个字节不允许两个指针相加、相乘、相除、移位以及指针与实数相加的运算。若指针变量p的初值为&a0,则p+i表示 ai的地址。 *(p+i) 是 p+i所指向的数组元素,即ai指向数组的指针变量也可以象数组名那样带下标。 例如:如果p=a;则ai可以表示成pi,或者*(p+i) 指针可以指向数组中的任何一个元素,而数组名是固定的。3.指针与多维数组下面讨论a0,a1, ai,an-1当a是不同维数的数组时,它们的含义是什么?1.当a是个一维数组时a0,a1, ai,an-1表示数组元素.2.当a是个二维数组时a0表示第0行第0个元素的地址,即&a00;a0+j表示第0行第j个元素的地址;ai+j表示第i行,第j列元素的地址一维数组的每个元素是同类型的一个向量,则可以表示为一个二维数组。如果有数组 a34;把a0,a1,a2看成a数组的三行.即a0中又包含了4个元素a00,a01, a02,a03把a0,a1,a2看成是一维数组的名字,分别为元素a00,a10和a20的地址第0行元素的地址为a0,a0+1,a0+2,a03而不是a,a+1,a+2.下面讨论 a, a+1, ,a+i,当a是不同维数的数组时,它们的含义是什么?一维数组:数组名a是数组的首地址,即数组中第0个元素的指针,即a0的地址;a+i是ai的地址,即&ai二维数组:数据名a是第0行的地址,a+1是第一行的地址,a+i是第i行的地址如果把任何数组都看成是向量,那么数组名指向这个向量的第0个元素;对于一维数组,它指向第0个元素;对于二维数组,它指向第0行;4. 二维数组中 *a 、*(a+1) 、*(a+i)不代表数组元素了,仍然代表地址。a是数组的首地址,也是第0行的行地址,*a仍然是个地址,它把行地址a列化了,即*a是第0行的首地址,所以第0行的元素的地址可以表示为*a,*a+1,*a+2 a+i表示第i行的地址;*(a+i)表示第i行第0个元素的地址;*(a+i)+j表示第i行,第j列元素的地址; *(*(a+i)+j)表示第i行,第j列元素aij5. 数组指针(指向数组的指针变量) 定义: 数据类型 (* 指针变量名)元素个数;例如: int (*p)5 一个指向一维数组(数组长度是5)的指针变量.与普通指针的区别 int *p ;int (*p)5;前者做p+操作将指向下一个数组元素,后者做p+的操作将跳过一行,指向下一行10.4 字符串和指针1.在C中可以用2种方法访问一个字符串1. 用字符数组存放一个字符串例10.15 定义一个字符数组并初始化,然后输出其中的字符串。#include void main( ) char string=I love CHINA!; printf(“%sn”,string);2. 用字符指针指向一个字符串例10.16 定义一个字符指针变量并初始化,然后输出它指向的字符串。#include void main( ) char *string=I love CHINA!; printf(“%sn”,string);1.指针数组的定义: 类型 * 数组名大小; 例如:int * px3;指针数组中的元素都是指针。2.指针数组的初始化方法例: char *p3=“Hello”, “Fang fang,”, “How are you?” ;指针数组的元素赋值例: char *p3; p0=“Hello”; p1=“Fang fang,”; p2=“How are you?”;10.5 指向函数的指针1.什么是函数的指针: 函数是一组代码的封装体,在内存中占有一片存储单元。编译时系统分配给函数一个入口地址,可以用一个变量来存放函数的入口地址,这个变量就是指向函数的指针(函数名是代表入口地址的指针常量)。2.指向函数的指针变量的一般定义形式: 类型 ( * 指针变量名)( )定义形式: 所指函数的类型 ( *指针变量名)( ) ;注意:指向函数的指针不能用于指针的加、减运算。调用函数的形式: ( *指针变量名)( 实际参数) ;10.6 返回指针值的函数1.返回指针的函数的定义格式: 类型 * 函数名(形参说明表) 函数体 return(指针); 定义: 类型名 * 函数名(参数表) 例如: int * funP( int x, int y)指针小
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海上光伏项目海洋环境监测与保护方案
- 消防设施区域划分与标识方案
- 市政管道施工地下水控制方案
- 医院药品采购与供应药品采购管理36课件
- 遮风避雨35景观建筑设施及小品设计18课件
- 二零二五版电动摩托车租赁与人才培训合同
- 二零二五年度文化活动策划劳务承包协议
- 二零二五年度房地产网络营销代理服务合同范本
- 2025版国有企业单位企业劳务派遣及人员管理服务合同
- 二零二五年度存量房屋买卖合同范本:房产交易保险合同范本
- 医学影像科年月三基三严考试附有答案
- 新生儿俯卧位通气的护理课件
- 医院安保突发治安事件应急预案
- 2023年宁波市慈溪市人民法院招聘编外人员考试真题及答案
- 高速公路服务区升级转型商业计划书
- 常见行政案件笔录模版
- 手术室甲状腺切除术手术配合护理查房
- 国家电网电力中级职称考试题
- 数据库设计规范说明
- 肾内科临床技术操作规范2022版
- 2023年中国工商银行软件开发中心春季校园招聘500人笔试模拟试题及答案解析
评论
0/150
提交评论