一维数组与指针
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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()读入以正整数,并将其输出(读程序,分析程序)