第07章 指针.pptVIP

  • 7
  • 0
  • 约1.1万字
  • 约 32页
  • 2016-11-27 发布于河南
  • 举报
第07章 指针

7.1 地址作为数据值 7.1 地址作为数据值 7.2 指针变量 7.2.1 声明指针变量 7.2.1 声明指针变量 7.2.2有关指针的运算符 7.2.2有关指针的运算符 7.2.2有关指针的运算符 7.2.2有关指针的运算符 取地址运算及取内容运算*的优先级和结合性 优先级:高于算术运算符 结合性:右结合 练习:说出程序的输出结果 #includestdio.h main() { int a, b, *p; p=a; *p=5; p=b ; *p=10; printf(%d,%d,%d\n,a,b,*p); } 思考题: 有int a=9, *p1=a;说出下面表达式的含义 *p1、*p1、*a、p1、*p1、a 7.2.3 指针操作 7.2.3 指针操作 7.2.3 指针操作 7.2.4 指针作为函数参数 7.2.4 指针作为函数参数 7.3 数组与指针 7.3.2 函数、数组与指针 7.3.3 保护数组的内容(const的使用) 7.3.4 多维数组与指针 7.3.4 多维数组与指针 7.3.4 多维数组与指针 7.3.5 指向数组的指针 7.4 函数指针 7.4.2 函数指针用作函数参数 7.5 动态分配内存 7.6 指针数组和指针的指针 7.6.1 指针数组 7.6.2 指针的指针 一个指针变量存放的是其它指针变量的地址,这就是指向指针的指针(多级指针)。 二级指针的定义: 类型 **指针变量名 没有指针,变量只能直接访问;有了指针可以使用它来访问另一变量,这叫“间接访问”;有了指针的指针还可以使用它来访问一个指针进而访问另一变量,这叫“二级间址访问”。但级数愈多则难理解易混乱。 例如: void main() { char *name[]={Follow me,BASIC,Great Wall,Fortran,Computer design}; int i; char **p; for(i=0;i5;i++) { p=name+i; printf(%s\n,*p); } } 判断输出结果是什么: int **pp,*p[4],a=5,b=6; p=a;pp=p;p=b; printf(“%d,%d”,*p,**pp); * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 信息工程学院 iec.cugb.edu.cn 第7章 指针 指针(pointer)的概念就是地址的概念,所谓指针其实指的就是保存好的数据对象在内存的首地址。操作指针就是操作数据的地址。 指针是C语言的精华,是一个很重要的概念。正确而灵活的运用指针,可以有效的表示复杂的数据结构轻松处理数据、动态地使用内存、便捷的处理字符串,从而编写出简洁、紧凑、高效的程序代码。 7.1 地址作为数据值 7.2 指针变量 7.3 数组与指针 7.4 函数指针 7.5 动态分配内存 7.6 指针数组和指针的指针 左值的概念 在C语言中,任何一个指向能寻出数据的内存位置的表达式称为左值(lvalue)。只有左值可以出现在赋值表达式的左侧,如简单变量、数组元素等,它们的值是可以改变的。而常量和算术表达式均不是左值。 关于左值有以下的几条原则: (1)每个左值都存储在内存中,内存中的每一个字节都按顺序有一个相应的编号,相邻字节的编号相邻。内存的编号称为地址。因而每一个左值都有其内存地址。 (2)一旦声明左值,尽管它的内容(如变量的值)可以改变,但它的地址不变。 (3)因为所保存的数值类型不同,不同左值需要不同大小的内存。 (4)左值的地址本身也是数据,也可以在内存中进行操作和存储。 其中的第(4)条初看起来好像没有什么用处,但用于程序设计时会显示出其深远的意义。 变量的指针 变量的首地址保存 到内存中就成为变量 的指针。 例如 long a; 声明了一个长整型变量, 将以4个字节存储其值,假 定分配在地址为1000~1003的内存空间。变量a的首地址1000(可用a取得)本身也是一个数据值,是一个整数,也同样可以存储在内存中,比如把它存放在3500开始的4个字节中。虽然在3500~3503中存储的1000是一个普通的整数,但它具有特殊的含义,它代表了变量a存储的地址。一个数值在程序中究竟是一个普通整数还是一个地址,取决于存储该数值的变量的声明类型:如果声明的是一个普通整型变量,那么它存储的就是普通整型数;如果声明的是一个指针变量,那么它存储的就是另一个对象的地址。 图7-1 内

文档评论(0)

1亿VIP精品文档

相关文档