C语言进修教程第六章-指针(1)
当前位置:以往代写 > C/C++ 教程 >C语言进修教程第六章-指针(1)
2019-06-13

C语言进修教程第六章-指针(1)

C语言进修教程第六章-指针(1)

指针简介

指针是C语言中遍及利用的一种数据范例。 运用指针编程是C语言最主要的气势气魄之一。操作指针变量可以暗示各类数据布局; 能很利便地利用数组和字符串; 并能象汇编语言一样处理惩罚内存地点,从而编出简练而高效的措施。指针极大地富厚了C语言的成果。 进修指针是进修C语言中最重要的一环, 可否正确领略和利用指针是我们是否把握C语言的一个符号。同时, 指针也是C语言中最为坚苦的一部门,在进修中除了要正确领略根基观念,还必需要多编程,上机调试。只要作到这些,指针也是不难把握的。

指针的根基观念 在计较机中,所有的数据都是存放在存储器中的。 一般把存储器中的一个字节称为一个内存单位, 差异的数据范例所占用的内存单位数不等,如整型量占2个单位,字符量占1个单位等, 在第二章中已有具体的先容。为了正确地会见这些内存单位, 必需为每个内存单位编上号。 按照一个内存单位的编号即可精确地找到该内存单位。内存单位的编号也叫做地点。 既然按照内存单位的编号或地点就可以找到所需的内存单位,所以凡是也把这个地点称为指针。 内存单位的指针和内存单位的内容是两个差异的观念。 可以用一个通俗的例子来说明它们之间的干系。我们到银行去存取款时, 银行事恋人员将按照我们的帐号去找我们的存款单, 找到之后在存单上写入存款、取款的金额。在这里,帐号就是存单的指针, 存款数是存单的内容。对付一个内存单位来说,单位的地点即为指针, 个中存放的数据才是该单位的内容。在C语言中, 答允用一个变量来存放指针,这种变量称为指针变量。因此, 一个指针变量的值就是某个内存单位的地点或称为某内存单位的指针。图中,设有字符变量C,其内容为“K”(ASCII码为十进制数 75),C占用了011A号单位(地点用十六进数暗示)。设有指针变量P,内容为011A, 这种环境我们称为P指向变量C,或说P是指向变量C的指针。 严格地说,一个指针是一个地点, 是一个常量。而一个指针变量却可以被赋予差异的指针值,是变。 但在常把指针变量简称为指针。为了制止夹杂,我们中约定:“指针”是指地点, 是常量,“指针变量”是指取值为地点的变量。 界说指针的目标是为了通过指针去会见内存单位。

既然指针变量的值是一个地点, 那么这个地点不只可以是变量的地点, 也可以是其它数据布局的地点。在一个指针变量中存放一
个数组或一个函数的首地点有何意义呢? 因为数组或函数都是持续存放的。通过会见指针变量取得了数组或函数的首地点, 也就找到了该数组或函数。这样一来, 每每呈现数组,函数的处所都可以用一个指针变量来暗示, 只要该指针变量中赋予数组或函数的首地点即可。这样做, 将会使措施的观念十分清楚,措施自己也简练,高效。在C语言中, 一种数据范例或数据布局往往都占有一组持续的内存单位。 用“地点”这个观念并不能很好地描写一种数据范例或数据布局, 而“指针”固然实际上也是一个地点,但它却是一个数据布局的首地点, 它是“指向”一个数据布局的,因而观念更为清楚,暗示更为明晰。 这也是引入“指针”观念的一个重要原因。

指针变量的范例说明

对指针变量的范例说明包罗三个内容:
(1)指针范例说明,即界说变量为一个指针变量;
(2)指针变量名;
(3)变量值(指针)所指向的变量的数据范例。
其一般形式为: 范例说明符 *变量名;
个中,*暗示这是一个指针变量,变量名即为界说的指针变量名,范例说明符暗示本指针变量所指向的变量的数据范例。
譬喻: int *p1;暗示p1是一个指针变量,它的值是某个整型变量的地点。 可能说p1指向一个整型变量。至于p1毕竟指向哪一个整型变量, 应由向p1赋予的地点来抉择。
再如:
staic int *p2; /*p2是指向静态整型变量的指针变量*/
float *p3; /*p3是指向浮点变量的指针变量*/
char *p4; /*p4是指向字符变量的指针变量*/ 应该留意的是,一个指针变量只能指向同范例的变量,如P3 只能指向浮点变量,不能时而指向一个浮点变量, 时而又指向一个字符变量。

指针变量的赋值

指针变量同普通变量一样,利用之前不只要界说说明, 并且必需赋予详细的值。未经赋值的指针变量不能利用, 不然将造成系统杂乱,甚至死机。指针变量的赋值只能赋予地点, 决不能赋予任何其它数据,不然将引起错误。在C语言中, 变量的地点是由编译系统分派的,对用户完全透明,用户不知道变量的详细地点。 C语言中提供了地点运算符&来暗示变量的地点。其一般形式为: & 变量名; 如&a变示变量a的地点,&b暗示变量b的地点。 变量自己必需预先说明。设有指向整型变量的指针变量p,如要把整型变量a 的地点赋予p可以有以下两种方法:
(1)指针变量初始化的要领 int a;
int *p=&a;
(2)赋值语句的要领 int a;
int *p;
p=&a;
不答允把一个数赋予指针变量,故下面的赋值是错误的: int *p;p=1000; 被赋值的指针变量前不能再加“*”说明符,如写为*p=&a 也是错误的

指针变量的运算

指针变量可以举办某些运算,但其运算的种类是有限的。 它只能举办赋值运算和部门算术运算及干系运算。
1.指针运算符

#p#分页标题#e#

(1)取地点运算符&
取地点运算符&是单目运算符,其团结性为自右至左,其成果是取变量的地点。在scanf函数及前面先容指针变量赋值中,我们已经相识并利用了&运算符。

(2)取内容运算符*
取内容运算符*是单目运算符,其团结性为自右至左,用来暗示指针变量所指的变量。在*运算符之后跟的变量必需是指针变量。需要留意的是指针运算符*和指针变量说明中的指针说明符* 不是一回事。在指针变量说明中,“*”是范例说明符,暗示其后的变量是指针范例。而表达式中呈现的“*”则是一个运算符用以暗示指针变量所指的变量。
main(){
int a=5,*p=&a;
printf ("%d",*p);
}
……
暗示指针变量p取得了整型变量a的地点。本语句暗示输出变量a的值。

    关键字:

在线提交作业