当前课程知识点:高级语言程序设计 >  指针 >  6.1 什么是指针 >  什么是指针

返回《高级语言程序设计》慕课在线视频课程列表

什么是指针在线视频

什么是指针

下一节:指针类型及相关概念

返回《高级语言程序设计》慕课在线视频列表

什么是指针课程教案、知识点、字幕

大家好

从本节课开始

我们开始学习指针

什么是指针

引入指针有什么好处

或者说为什么要引入指针

指针有哪些知识

那么在本节课里面我们做一些介绍

那么在正式学习指针之前

我们谈一下本章的学习安排

准备花一节的时间

大概5分钟左右

我们了解一下指针及其相关的背景知识

这就是第一节的学习内容

第二节课介绍下引入指针的好处

也就是为什么要引入指针

以及后面我们学习指针时要用到的一些概念

比如指针变量 指针指向的对象

数组指针 指针的指针等等

为我们后面的正式学习打下一个基础

第三节我们学习指针变量的定义

赋值与使用

第四节课我们学习指针的运算

这样指针的语法

语义及其背景我们都学习了

最后一节我们结合数组

来学习指针的使用

也就是语用

怎么样用指针

希望能给大家带来一段愉快的学习

好 下面我们来开始学习指针

什么是指针

在计算机科学中

指针它的英语叫Pointer

是编程语言的一个对象

一个什么样的对象

它可以是一个变量

也可以是一个常量

它的值是地址

直接指向存储在电脑存储器里面

另一个地方的值

由于通过地址能找到所需的变量单元

可以说 地址指向的该变量单元

因此将地址形象的我们称为"指针"

只是说指针就是地址或者值是地址的变量

这对于我们理解掌握好指针是不够的

我们还要学习地址相关的知识

要结合C语言来领会地址的作用

地址的名称

地址的分配

地址的类型

下面我们先看一看地址的作用

地址是用来干什么的

地址它是用来定位内存中的数据的

对数据进行读写

通常也称为数据访问

在程序里面它体现为

对数据进行加工处理

读 运算 写 输入 输出

这都是加工处理

地址的名称

地址是有名称的

在个人计算机中

一个地址是一个32位或者64位的二进制数

在程序中体现它体现为各种标识符

为什么说地址体现为各种标识符

因为这些标识符像变量名 数组名

函数名这些标识符

经过翻译程序翻译为地址

这样地址和名称对应起来了

根据名称所处的环境和属性

来决定对该地址的内容是读还是写

这样做有什么好处

它的好处是

我们不用直接掌握数据在内存中的处理细节

也就是地址这些相关的细节

我们只需要使用名称

也就是标识符我们就可以了

从这个意义上来说

我们程序中的很多地址是有名称的

是我们自己在定义的时候

给这些地址取了一个名称

在看一看地址的分配

分配地址就是分配内存

内存是计算机里面的共享资源

必须通过操作系统来分配

那么在c程序里面体现为

先定义后使用以及动态内存分配

具体地说

在c语言里面

凡是通过数据定义

包括函数定义

和后面我们要学的malloc calloc realloc等

动态内存分配函数分配的地址

都是通过操作系统来分配的

它们是合法的

在程序中

自己指定一个整数为地址

那就是没有经过操作系统分配的

这种是不允许的

例int a=100,b=200;

char c=‘k’;

这样定义后

系统内存是经过操作系统分配

来看看是右边的这个图

这里a占据4个字节

第一个字节的地址是0014FF34

第二个字节的地址是0014FF35

第三个字节的地址是0014FF36

第四个字节的地址是0014FF37

这4个字节里面存储的是a的值100

b同样占据4个字节

另外它和a是同一个类型

第一个字节的地址是0014FF38

第二个字节的地址是0014FF39

第三个字节的地址是0014FF3a

第四个字节的地址是0014FF3b

这4个字节里面存储的是b的值200

C变量是字符型

它只占据一个字节

它的地址是0014FF3c

里面的值是字符’K’的ASCII码

注意到内存中的每个字节有一个地址

一个数据可能占据一个字节

也可能占据多个字节

占据多个字节时

以哪一个字节的地址作为数据的地址

那么答案是数据占据内存的首地址

作为整个数据的地址

什么是首地址

就是把每一个数据占据的字节

让字节的地址由小到大

从上往下排的首地址

这种做法通常称为逻辑地址空间

它是内存地址的一种地址映射

一种排列示意

比如如图 a的地址

b的地址c的地址

在看一看数据的类型

既然数据地址都是数据在内存中的首地址

那么数据类型和地址有什么关系

我们看一看

那么读写的时候

计算机是怎么知道

从该地址开始去读写多少个字节的

为什么用a的地址我们就要读写4个字节

而字符c的地址

我们只读写一个字节

计算机是怎么知道的

是根据什么来的

这是根据数据类型来决定的

数据类型决定了数据在分配存储的时候

占据多少个字节

也决定它读写的时候

读写多少个字节才是一个完整的数据读写

因此从这个意义上来说

数据的地址是有类型的

就是数据的类型

这就是我为什么说地址类型的原因

那么下面我们再结合C语言领会一下数据的地址

一般变量

先看看一般变量

前面我们所学的一般变量的定义

比如说int a

这个定义语句被执行后

操作系统就给a分配了一个地址

这个地址对应的名称就是a

它是a占据的这块内存空间里面的首地址

通过变量名a

在其作用域里面

它是能够被翻译为正确的地址

并且根据它的环境确定是读还是写

这里有一点要注意的是

有数据定义int a后

变量名a既能表示使用变量的地址

也能表示使用它的值

也就是对这个地址里面的内容

既能表示是读也能表示是写

同样用名称a能表示

它的读和写

那么是怎么区分的呢

有没有标准

有的

变量名如果出现在赋值符号的左边

是使用它的地址

其他的情况下是使用它的值

在赋值符的右边或者没有赋值符的时候

如果要使用变量的地址

必须显示的给出来&变量名

如 &a 这是一般变量

前面我们学的数组

我们根据数组也谈一下相关的知识

在前面学数组的时候知道

数组名就是地址

是该数组的元素

占据的一块连续存储区的首地址

而且是常量地址

数组定义语句执行后

数组名对应的地址值在代码中不许更改

那么这样我们就结合我们学的数据

对指针和相关的地址

我们有了一个基本的认识

本节就讲到这里

谢谢大家

高级语言程序设计课程列表:

程序设计和C语言

-1.1 计算机程序和计算机语言

--计算机程序和计算机语言

--致敬先辈:伟大的C语言之父——丹尼斯·里奇 程序员

-1.2 C程序的构成

--C程序的构成

--当前主流程序设计语言各自都有什么优势?

-1.3 C语言编辑、编译、运行(VC++2010学习版)

--C语言编辑、编译、运行(VC++2010学习版)

-练习题

顺序结构程序设计

-2.1 变量的定义和使用

--变量的定义和使用

-2.2 数据类型

--数据类型简介

--整型数据

--实型数据

-2.3 格式输出和格式输入

--格式输出printf函数

--格式输入scanf函数

--单个字符的输入输出

-2.4 运算符和表达式

--运算符和表达式

-2.5 结构化程序设计入门

--结构化程序设计入门

-练习题

选择结构程序设计

-3.1 为什么要用选择结构解决问题

--为什么要用选择结构解决问题

-3.2 如何正确表示选择结构中的条件

--如何正确表示选择结构中的条件

-3.3 用if语句及if语句嵌套实现选择结构

--用if语句及if语句嵌套实现选择结构

-3.4 用switch语句实现选择结构

--用switch语句实现选择结构

-练习

循环结构程序设计

-4.1 循环的引入

-- 为什么要用循环结构解决问题

-4.1 循环的引入--作业

-4.2 用while语句实现循环

--用while语句实现循环

-4.3 用do-while语句实现循环

-- 用do-while语句实现循环

-4.4 用for语句实现循环

-- 用for语句实现循环

-4.4 用for语句实现循环--作业

-4.5 何时需要用循环的嵌套

--何时需要用循环的嵌套

-4.6 如何提前终止循环和提前结束本次循环

--如何提前终止循环和提前结束本次循环

-习题--作业

数组

-5.1 数组类型的引入

--数组类型的引入

-5.2 一维数组的定义和初始化

--一维数组的定义和初始化

-5.3 一维数组的使用

--一维数组的使用

-5.4 二维数组的定义和初始化

--二维数组的定义和初始化

-5.5 二维数组的使用

--二维数组的使用

-习题--作业

指针

-6.1 什么是指针

--什么是指针

-6.2 指针类型及相关概念

--指针类型及相关概念

-6.3 指针变量的定义、赋值与使用

--指针变量的定义、赋值与使用

-6.4 指针的运算

--指针的运算

-6.5 指针与一维数组

--指针与一维数组

-6.6 指针的指针

--指针的指针

-6.7 指针与二维数组

--指针与二维数组

-习题--作业

函数

-7.1 为什么要自定义函数

--为什么要自定义函数

-7.2 函数的定义

--函数的定义

-7.3 函数的调用

--函数的调用

-7.4 函数参数的传递

--函数参数的传递

-7.5 函数的嵌套调用和递归调用

--函数的嵌套调用和递归调用

-7.6 变量的作用域和存储类型

--变量的作用域和存储类型

-习题--作业

字符串

-8.1 字符串的存储及输入输出

--字符串的存储及输入输出

-8.2 系统字符串处理函数

--系统字符串处理函数

-8.3 自定义字符串处理函数

--自定义字符串处理函数

-习题--作业

结构体和共用体

-9.1 结构体类型的定义

--结构体类型的定义

-9.2 结构体变量及指针变量的定义及使用

--结构体类型变量和指针变量的定义和使用

-9.3 结构体变量和指针变量作函数的参数

--用结构体变量和指向结构体的指针作函数参数

-9.4 结构体数组的定义和使用

--结构体数组的定义和使用

-9.5 共用体类型和枚举类型

--共用体和枚举类型

-习题--作业

动态内存分配

-动态内存分配--习题

文件

-习题--作业

什么是指针笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。