c语言数组输出fibon,第六章 指针与数组(52页)-原创力文档

本文深入探讨C++中的指针与数组概念,包括指针作为内存地址的操纵工具,如何通过指针进行间接访问,以及指针在多维数组中的应用。同时,介绍了指针类型的定义、初始化与赋值,强调了指针变量必须通过取地址运算符(&)获取已分配内存变量的地址,并通过间接引用运算符(*)访问数据。此外,还讨论了指针作为函数参数和模板在算法设计中的重要性。
摘要由CSDN通过智能技术生成

C++程序设计 第六章 指针与数组

PAGE

PAGE 15

指针与数组

指针是C++的难点之一,也是最易出错的知识点。C++语言拥有在运行时获得变量地址和操纵地址的能力,这一点对有关计算机底层的程序设计是非常重要的。这种可用来操纵地址的变量类型就是指针。指针可以用于数组,用于内存访问,还可作为函数的参数。除C++外,没有哪一种高级语言具有功能这么强大的指针。指针的功能很强,但使用不当又会带来严重的后果。所以学习本章时一定要特别细心和认真。本章将深入学习数组包括多维数组的知识,以及它们与指针和多级指针的关系及应用。最后,探讨各种复杂指针的概念和应用。

算法,尤其是通用的算法是程序设计的重点,模板是建立通用的与数据类型无关的算法的重要手段,因此在学习与数据结构相关的表、排序与查找的知识和算法时,要逐步熟悉函数模板和类模板的编程方法。

6.1 指针与地址

在本小节中,将学习指针与变量占用的存储器单元大小及首地址之间的关系,学习指针的基本使用方法。

6.1.1指针的概念

在高级语言编程中,面对的是变量名,而源程序经过编译系统处理后,每一个变量在程序执行前将分配在内存指定的位置上。程序执行中,计算机是到与变量名对应的内存地址去处理放在那里的数据。设有一个整型变量i,编译后,I存放在2700H开始的四个字节中,计算机进行i++运算,则把2700H开始的四个字节的内容取到运算器中,执行增量指令,所得结果放回2700H开始的四个字节中。这种按变量的地址直接存取变量的方法称为“直接访问”方式。存储变量的内存空间的首地址称为该变量的地址。

如果将一个变量的地址放在另一个变量中,则存放地址的变量称为指针(Pointer)型变量。这时存取变量,也可以间接的由指针变量取得该变量的地址进行,这称为“间接访问”方式。由于指针变量中的值是另一个变量的地址,我们习惯上形象地称为指针变量指向该变量。指针变量中的值也简称为指针,所以指针就是地址。

指针类型可以按它指向的变量的类型区分。基本类型和派生类型都有对应的指针类型,包括类(class),甚至还有指针类型(指向指针的指针,二级指针)。

为什么要明确指针是指向哪一种数据类型的呢?因为指针中只放变量首地址是不够的,还要知道占多少内存?数据又是怎样组织的?整型数占4个字节,浮点数占4个字节,字符型占1个字节,宽字符占2个字节;并且它们有各自不同的存储组织方式。

指针类型变量定义语句格式如下:

《存储类型》 类型 *变量名1《,*变量名2…》;

这里*是一个定义变量为指针的说明符,而不是指针变量的一部分。*前后可以加空格,也可不加。必须指出的是定义时每一个指针变量都需要一个指针变量说明符。例如:

int *lp1,*lp2;

如果写成

int *lp1,lp2;

则编译器认为lp2是整型变量,只有lp1是指向整型变量的指针型变量。

6.1.2 指针变量的赋值、初始化与简单应用

前面所介绍的所有类型的变量或对象的数据成员都可以赋以相应类型正确的数据,但是对指针变量决不可以任意赋一个内存地址。指针变量中存放的是在内存中可寻址的变量或对象的首地址,而变量或对象的内存地址是由编译系统来分配的(当然最终是由操作系统来安排的)。程序员不能代替系统给变量分配内存,当然也就不能给指针变量随意赋一个地址值,只能取一个已经分配了内存的变量的地址赋给指针变量。C++中有两个专门的运算符与指针有关。

“&”取地址运算符,作用于内存中一个可寻址的数据(如:变量,对象和数组元素等等),操作的结果是获得该数据的地址。运算结果不可作为左值。

“*”间接引用(dereference)运算符,作用于一个指针类型的变量,访问该指针所指向的内存数据。因结果是内存中可寻址的数据,所以它可以作为左值。

【例6.1】指针赋值实例:

2018

20

18

1

p_age

age1

2

age2

void main(){

int age1=18,age2=20,*p_age;

p_age=&age1; //情况1,见图6.1

cout<

p_age=&age2;

图6.1指针赋值 //情况2,指针改指另一变量,见图6.1

图6.1指针赋值

cout<

}

注意:指针变量p_age在定义说明时要加“*”,这里“*”为说明符;而在可执行语句中p_age不用也不允许加“*”号。在可执行语句中“*”为间接引用运算符,*p_age代表p_age所指向的在内存中可寻址的数据。在上例中最后的*p_age就是age2。

指针变量可以初始化,例如:

int age ,*p_age=&age

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值