当前课程知识点:高级语言程序设计 >  指针 >  6.3 指针变量的定义、赋值与使用 >  指针变量的定义、赋值与使用

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

指针变量的定义、赋值与使用在线视频

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

下一节:指针的运算

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

指针变量的定义、赋值与使用课程教案、知识点、字幕

大家好 本节课

我们学习指针的定义 赋值和使用

我们先来看看指针变量定义的一般形式

指针定义的一般形式是这样的

type * 标识符 ;

或者type (*标识符)

比如 int *p;

这就是定义的一个指针变量p

double *q;

char *s;

这都是定义得指针变量

注意这里的type可以是基本类型

也可以是构造类型

比如说数组

比如说后面我们要学的结构体 共用体等等

也可以是函数类型

甚至是指针类型

比如我们看看下面的例子

int (*p)[10];

这里就定义了一个指针变量p

这是一个指向一维数组的指针

int *(*q);

这也是一个指针

这是指针的指针

int *在这里就是一种类型

q是指针的指针

这一句也可写为int **q

还有int (*func)(int,int);

这也是指针变量

*func这也是定义一个指针变量

这是指向函数的指针

因为int (int,int)这是一种类型

只要在中间填上标识符

比如max它就变成了int max(int x,int y)

它就是一个函数

函数名max

所以在这里这个指针变量是指向函数的指针

我们通常称为函数指针

这是指针的定义

下面我们看一看指针变量的赋值

指针变量定义后

我们就可以给指针变量赋值了

指针变量的赋值

它不同于我们前面学习的数据

变量的赋值

要注意以下几点

一给指针变量赋的地址值

必须是经过操作系统分配的地址

二指针变量的值

也就是这个地址值的类型

要与赋值的地址的类型要匹配

如果不匹配的话

翻译程序是会报错的

三给指针变量赋值的时候

我们可以赋一个空地址值NULL

我们看看下面的指针赋值

也就是初始化是合法的

看第一个例子

int a,*p;

然后P=&a;

这是合法的

再看第二个例子

int a,*p=&a;

这是在定义的时候初始化

和1的例子效果是一样的

再看第三个例子

int *p;

p=NULL;

那么再看看第四个例子

int *p,*q,a[10];

p=a;

q=p;

这也是合法的

因为a是数组的首地址

数组中的元素是int类型

所以把a的值赋值给p

再赋值给q是合法的

下面看看给指针赋值

或者初始化不合法的情形

看看int a,*p;

p=a;

这是不合法的

因为这里的a放在赋值符号的右边

代表a的值

a这个时候我们还没有给它赋值

即使给a赋了值

这个值也不是经过操作系统合法分配的地址值

所以这是不合法的

再看六

int a,*p=a;

这和刚才的五情形是一样的

这里把a赋值给p

这是个初始化

a赋值给p

那么再看看七

int *p;

p=1000;

这也是不合法的

因为1000把它作为地址值

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

那么未经操作系统分配的地址值是不合法的

再看看八

int a,*p,**q;

p=&a;

这个是合法的

我们再把p送给q

这是不合法的

为什么

因为p放在赋值符号的右边

代表p的值

P的值就是a的地址

那么a的地址

它的类型是int类型

因为这个地址经过翻译程序访问

是一个int类型的数据

*q是指针的指针

q应该是某一个int类型的指针的地址

所以这里面把p值赋值给q

两个地址类型是不匹配的

所以是不合法的

如何来用指针变量

由于指针变量的值是地址

所以对指针变量的使用

就涉及到是使用指针变量本身

还是使用把指针变量的值取出来

再访问一次的数据对象

也就是它指向的对象

那么我们看一个例子

int a,*p=&a,*q;

q=p; //使用p

这个时候使用的是p的值

把p的值送给了q

然后*p=6;

这是可以的

因为p的值就是a的地址

*p代表p指向的对象

p的值就是a的地址

*p指向的对象就是a

把6赋值给a

当然就是合法的

但是在这里我们就看到了

一个是使用指针变量本身p

另外一个是使用p指向的对象*p

因此我们对指针变量的使用要区分这两种情况

是使用它本身还是使用指向的对象

用p指向的对象在这里就是a

它是a的另外一种访问方法

那么指针指向的对象就是*加指针变量名

这样,我们把刚才说的意思做一个总结

对指针的使用要区分

一个是使用指针变量本身

还是使用它指向的对象

如果是使用指针变量本身

那就是只有一个指针变量本身名称

比如刚才的p

如果是使用指针指向的对象

不光要有指针变量名

在它的前面还要带上*才代表指向对象

那么我们使用指针指向的对象的时候

那要遵循指向的对象所属的类型的使用方法

也就是使用

这个

下面我们来看一个例子

那么定义两种指针变量

并且用指针的方法来访问数据

通过这个例子

我们来巩固一下对指针变量的使用

那么这个程序的代码是这样的

#include

int main()

花括号里面是定义的一般的整型变量

a以及指向一般整型变量的指针变量p

还有字符变量ch

以及指向字符类型的指针变量q

我们把a的地址送给p

那么请注意这里

p的值今后就是a的地址了

就是那么*p就是a了

凡是a出现的地方

我们都可以用*p来替换

把ch的地址送给q这是合法的

那么q的值就是ch的地址

*q今后访问的就是ch

因为q是CH的地址

q指向的对象就是ch

也就是说今后凡是ch出现的地方

我们可以用*q替换

比如我们看看把7复制给*p

那实际上等效于把7送给a

把字符a复制给*q

那实际上就等效于把字符a送给ch

这里*q是ch的另外一种访问方法

那么*p除以2的余数在赋值这个*p

那实际上他这里就是a除以2的余数赋值给a

*q加上32赋值给*q

那就是ch的值加上32送给ch

好下面我们输出a的值

ch的值是多少

注意在这里输出的时候

我们是用*p代表a的值

*q代表ch的值

那么我们看看输出的结果

大家会发觉a的值输出来就是1

那么ch的值是小写的a

那么和我们的这个验证的效果

就是*P代表的访问就是a

*q实际上访问的就是ch

这样我们把指针变量的使用

在这里我们就讲完了

这节课就讲到这里

谢谢大家

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

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

--共用体和枚举类型

-习题--作业

动态内存分配

-动态内存分配--习题

文件

-习题--作业

指针变量的定义、赋值与使用笔记与讨论

也许你还感兴趣的课程:

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