C语言单元6 指针.pptVIP

  • 1
  • 0
  • 约1.12万字
  • 约 26页
  • 2020-02-07 发布于辽宁
  • 举报
6.1.1 直接访问和间接访问 . 程序中说明一个变量时,C编译程序就会为其在内存中分配存储单元,以便存放这个变量的取值。变量的类型不同,分配给它的内存空间大小是不同的。 . 当一个变量所需内存字节数大于1时,它就会与好几个字节的地址相关。所谓一个“变量的地址”,就是指其占用存储区中由小到大的第1个字节地址。 例: 理解变量地址与变量类型的关系 #include stdio.h main() {  int x;  float y;  char ch;  x = 32;  y = 55.068;  ch = A;  printf (address of x = %u\n, x);  printf (address of y = %u\n, y);  printf (address of ch = %u\n, ch); } . 程序的运行结果及内存分配示意 32 65492 65493 55.068 65494 65495 65496 65497 65498 65499 x y ch * main() {float x; int y; … } 变量的两个物理意义 2000 2001 2002 2003 2004 2005 … x y 变量的内容 变量的地址 * 虽然65492,65494和95499都是地址,但从这些地址开始应该往下多少字节才能得到所需的数据?这要由变量的类型来决定。在C语言中说变量地址,还隐含有这个变量的类型信息,不能笼统地只把它视为一个地址。 地址起到指向作用,这正是形象地称变量的内存地址是它的“指针”的原因。即地址就是指针,指针就是地址。 . 变量地址的作用 (1) (2) 变量的地址(指针)是一个数值(一个无符号的数值,而不是普通意义的数值),因此可把这个值存放到某个变量里保存。这种用来存放地址的变量,称为“指针变量”。 . . 由于变量的地址(指针)还隐含有这个变量的类型信息,所以不能随意把一个地址存放到任何一个指针变量中去,只能把具有相同类型的变量的地址,存放到这个指针变量里去。即指针变量也应有自己的类型,它与存放在里面的地址所隐含的类型应一致。 . 通常是通过变量名来访问存储单元的。这种由变量名得到其地址,从这个地址直接完成对存储单元访问的方法,称为对内存的“直接访问”。 . 比如,程序中遇到变量y时,就由它得到地址65494。由65494就可以取出它里面的内容或往它的里面存放新内容。 32 65492 55.068 65494 65499 x y ch 65494 65500 ptr A * . 若把变量y的地址放在变量ptr里,那么ptr就是一个指针变量,如图所示。 32 65492 55.068 65494 65499 y 65494 65500 ptr 指针变量 32 65492 55.068 65494 65499 65494 65500 65494 指针变量ptr A A 65500 . 这时,可通过变量ptr取 到变量y的内容55.068。但访 问过程应改为:先从指针变 量ptr得到地址65500。从中 取出里面的内容65494,它 是变量y的地址,而不是y的 内容。然后根据这个地址的 指点(如图中所画的箭头),到65494里拿到y的值55.068。即这时是通过一个地址(65500)得到另一个地址(65494),再由这个地址去访问所需的存储单元。这种对存储单元的访问方法,称为是对内存的“间接访问”。 . 内存间接访问的示意图,也可以有另一种画法,要表达的意思是一样的。只是为了看得更加清楚,就把指针变量ptr提出来画到了外面,用箭头指向65494,以表明它的内容65494是一个指针,指向了变量y。 * 一个语句里可说明相同类型的指针变量,其前都必须冠有指针变量的标识“*”。 变量说明中的“*”号,只起到标识的作用,表示由变量名给出的是一个指针变量, 它不是所说明的指针变量名本身的一个组成部分。 C语言把内存单元的地址视为一种数据类型,即“指针型”数据。存放指针型数据的变量,称为指针型变量,简称“指针变量”。 6.1.2 指针变量的说明和初始化 . . 说明一个指针变量的格式是: . 关于指针变量说明的几点注意 (1) (2) 变量说明中的数据类型,表明指针变量里所存变量地址的类型。比如: int *ptr; 表示ptr是一个指针变量,里面只能存放整型变

文档评论(0)

1亿VIP精品文档

相关文档