一维数组与指针

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

指 针

1、 概述

1.1 地址和指针的概念

如果在C 语言中定义一个变量,系统会自动的给它存储空间。比如:int a,b,c;系统会自动的给a,b,c 分别分配2个字节的空间,内存中的表示如下图:

这样以来,就建立了变量和地址的对应关系。如果产生赋值行为,比如:a=1,b=3;,存储图如下:

如果产生具体的操作,比如:c=a+b ,具体的过程如下: 第一步:从2001-2002字节空间取出1; 第二步:从2003-2004字节空间中取出3;

第三步:将1和3相加后的结果4存入变量C 所指向的地址空间(2005-2006),图例如下:

a

b c

a

b c

以上的程序,在C 语言中称为“直接访问”。 既然有“直接访问”,肯定会存在“间接访问”,举例如下:

张三出差,住宾馆,房间号码为1001,从携带钥匙的方式上来看,有两种方式: 1、 钥匙自己带(直接方式);

2、 钥匙放在总台上,要开门,先到总台拿钥匙,而后开门(间接方式) 以上是生活中的例子,那么,在C 程序中,如何表示这种“间接方式”呢? 第一步:定义一个普通的变量并赋值(int a=3;)

第二步:定义一种变量,用来存储变量a 的地址(a_pointer );

第三步:建立该变量和普通变量之间的联系,将变量a 的地址存储到a_pointer 中。 第四步:通过该变量(a_pointer )来访问a;

程序如下:

b c

一种示意图:

以上的图形象的表示了一种“指向关系”。

“*”,表示指向。 在C 语言中,一个变量的地址被称为该变量的“指针”,存储该变量地址的“东东”,称为指针变量。

故,指针是一个地址,而指针变量是存放该地址的变量,它用来指向“指针”所表示的地址。

1.2 指针变量的定义和使用

定义格式:

数据类型(基本型) *指针变量

比如:int *pointer_1;指针变量是pointer_1,而不是*pointer_1; 有了以上的定义,pointer_1是我们定义的指针变量,*pointer_1是具体的内容。 从以上程序来看,*pointer_1和i 是一回事。

到此为止,我们已经知道了指针变量的定义,既然变量定义了,就要使用,如何使用呢?

要想使用,必须理解连个运算符号:

●&:取地址运算符

●*:指针运算(也称为“间接访问”运算符),取其指向的内容。

在指针定义和使用过程中的注意点:

通过以上的学习,我们的感觉:真烦!!!当时,随着学习的深入,我们会逐步体会到指针的好处:

●可以使程序简洁、紧凑、高效

●在函数调用后改变有关变量的值

●高效的处理数组和字符串

●动态分配内存

●直接处理地址

●有效的表示复杂的数据结构

●完成文件的操作

1.3 指针变量作为函数的参数

2、数组与指针

2.1 一维数组与指针

在前面的学习过程中,我们再三提到一个概念:数组名代表数组的首地址,比如: Int a[5]={12,34,56,78,11};

数组的数据在内存中的存储结构如下:

有了这张图以后,我们隆重推出一个重要的概念:a=&a[0]

如果我们定义了一个指针变量,并让其和数组a 建立联系,程序如下:

既然数组和指针建立了联系,该如何使用数组呢?

数组的使用,除了前面学过的使用下表法以外,只要数组和指针建立了联系,就可以通过指针的操作来使用数组。

a=&a[0]

a[0] a[1] a[2] a[3] a[4]

C语言规定:

●如果指针变量p指向数组中的一个元素,则p+1指向数组的下一个元素,p-1指向

数组的上一个元素。

●同理,根据p=a,则a+1指向数组的下一个元素,a-1指向数组的上一个元素。

下面,通过例子来说明:

例子:设有一个一维整形数组,有10个元素,请输出全部的原素。

【方法三】指针法:

在以上程序编写方法中:

1、下标法比较直观(大家喜欢);

2、以上三种方法中,方法三的执行效率最高,在方法三中,方法二执行效率最高。

3、注意p是变量,p++、p+=1都是成立的;a是常量,a++(--) 、a+=1是万万不行

的。

特别提醒各位的是,指针在“指来指去”的过程中,当前值是变化的。对此,有可能造成程序的混乱。

例子:输入5个整数给整形数组,然后输出。

以上的程序看起来没有说明错误,但运行结果却是错的,为什么?

原因:经过第一个循环后,指针变量p中存储的已经不是&a[0]了,而是指向了数组的尾端,即p+5,其值不可预料,C在编译的时候不会提示错误,这对于初学者来说,很难发现,提醒大家注意。

2.2 一维数组作为函数的参数

以上的表,可以形成4种组合:

例子:编一个函数,求一数组中最小的元素。

【组合一】实参和形参均为数组名

实战训练

1、输入三个整数,按从大到小的顺序输出(用指针的方法)

2、通过指针操作,找出三个整数中的最小值并输出。

3、调用自定义的函数getint()读入以正整数,并将其输出(读程序,分析程序)

相关文档
最新文档