当前课程知识点:高级语言程序设计 >  指针 >  6.5 指针与一维数组 >  指针与一维数组

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

指针与一维数组在线视频

指针与一维数组

下一节:指针的指针

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

指针与一维数组课程教案、知识点、字幕

大家好

本节课我们来学习如何用指针引用数组

在函数间共享数组是常见的

如何通过指针来引用数组

是我们c程序中必须要掌握的

我们先来看看

我们如何利用指针来引用一维数组

我们看一个例子

int a[10]初始化

数组a10个元素初始化

1,3,5,7,9,11,13,15,17,19

int *p

然后我们把a赋值给p

在这里数组名a是一个常量指针

它是一个int *类型的指针

所以a和p这两个指针类型相同

无非p是一个指针变量

a是一个指针常量

我们把a赋值给p

那么这是正确的

是允许的

是合法的

我们看看这个右边的这个示意图

a就是整个这个数组

这块连续存储区域的首地址

那么当我们把数组名a赋值给p之后

那也就是把a[0]的地址

也就是a那么赋值给了p

P就指向这块数组的连续存储区的第一个元素

它也是这块连续存储区的首地址

p的值就是

在这里p a a[0]的地址均指向同一个地方

它们都是数组占据的这一块

连续存储区的首地址

也是数组中下标为0的元素a[0]的首地址

不同的是

p是变量

a a[0]的地址都是常量

那么我们看一看

接着P+1

由于p的值指向a[0]

那P+1就指向数组中的第二个元素

指向值为3的

也就是a[1]

那么根据指针的运算

我们就可以有如下的这样一个推导表

P在这里它的值是a

也是a[0]的地址

那p+1对应的就是a+1

它就是a[1]的地址

p+2就相当于a+2

它对应的是a[2]的地址

p+i那么就可以推断出来

它就相当于a+i

它是a[i]这个元素的地址

那对p指向对象

也就是*p

*p就相当于*a

由于a是这块数组区域的首地址

它的类型是int类型的指针

因此*a访问的是a[0]

那同样我们可以推断出来

P+1它指向的对象相当于a+1 就是a[1]

P+2它指向的对象a[2]

相当于a+2指向的对象

同样P+i指向的对象和a+i指向的对象是一回事

因为它这里p的值就是a

那么它指向的对象就是a[i]

因此*(p+i)访问的就是a[i]

那么这个推导就是要告诉我们

一旦我们把数组的首地址赋值给了一个指针

这个指针的类型恰好是和元素

它指向的对象的类型和元素的类型一样

那么p+i它的值就是a[i]的地址

p+i指向的对象访问的就是a[i]

因为a[i]等效于*(a+i)的指向对象

所以*(p+i)指向的对象我们也可以写成p[i]

这样我们能用这个知识

我们就能够通过指针变量来访问一维数组元素

我们看一个例子

方法一 用下标法来访问数组

这是我们前面学的数组这一章的访问方法

那么程序代码是

#include

int main( )

花括号里面int a[10],i

那么输出一个提示

请输入数组中的元素

for(i=0;i<10; i++)

那么输入值给a[i]

再输出一个提示

我们输出数组中的元素

for(i=0;i<10; i++)

需要printf 格式输出函数来输出a[i]的值

那么整个数组

这样我们就把元素进行了输入和输出

进行了一次存储

那么这是用前面数组学的知识

数组名加下标这种方法

来访问数组中的元素的

那么我们学了刚才的指针的知识之后

我们就可以用指针的知识

来访问数组中的元素

我们来看一看实例是怎样的

来体会一下

用指针变量存储一维数组元素

这前面是一样的

#include

int main( )

花括号 int a[10],i

我们多定义一个指针变量*p

当我们把数组中的首地址a赋值给p的时候

那么我们输入原来是用a[i]取地址

我们就可以改成p+i

因为刚才我们推导p+i就是a[i]的地址

同样我们输出的时候

用a[i]在这里就可以改成

p+i指向的对象*(p+i)

这样就可以输出a[i]的值

那么我们用指针p

就可以输出 输入

输出整个数组a

对一维数组的元素实现存储

那么我们可以更进一步

对于这个指针p

由于p是指针变量

让p的值变化

我们不需要a

可以让p的值变化

像#include

int main( )

花括号 int a[10],i,*p;

这是刚才的这个指针方法

把a赋值给p之后

我们用p+i 变化一下

由于p是指针变量

我们不要i

让p的值发生变化

把a赋值给p在这里

然后我们每一次完成输入之后

那么p的值增加一个

那就指向下一个数组元素

那么它的条件也改为p

因为最多我们只能访问到a[9]

同样输出的时候

我们不需要a

我们直接利用p for

把a送给p p

然后我们输出*p

因为p的值是在变化

所以随着循环的执行

p值在变化

开始指向的是a[0]

那么在做一次指向a[1]

在做一次指向a[2]

整个循环里面p的值在不停的变化

那么每一次取的就是相当于a[i]的地址

所以*p在这里访问的就是a[i]

那么这个p的值

由于是指针变量

所以它自己可以变化

这种方法我们也要掌握

这就是用指针变量存取一维数组元素

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

程序设计和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 共用体类型和枚举类型

--共用体和枚举类型

-习题--作业

动态内存分配

-动态内存分配--习题

文件

-习题--作业

指针与一维数组笔记与讨论

也许你还感兴趣的课程:

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