《C语言程序设计》 课件 7.3.1 指针变量与数组_第1页
《C语言程序设计》 课件 7.3.1 指针变量与数组_第2页
《C语言程序设计》 课件 7.3.1 指针变量与数组_第3页
《C语言程序设计》 课件 7.3.1 指针变量与数组_第4页
《C语言程序设计》 课件 7.3.1 指针变量与数组_第5页
已阅读5页,还剩13页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

指针变量与数组指针变量与数组指针与一维数组指针的运算字符指针与字符串数组中的每个元素都可以通过下标唯一确定,即通过下标可以访问(操作)数组中的元素。在C语言中,凡是可以通过数组下标方式完成的访问(操作)均可以通过指针方式实现。C语言规定:数组名就是数组的首地址常量,即int

a[10];a==

&a[0]C语言系统内部处理机制,指针方式效率高,但不直观。指针与一维数组a[6]a[0]a[1]a[2]a[3]a[4]a[5]a[9]memory访问数组的两种方式下标方式inta[10],

*p;p=a;

(等价于

p=&a[0];)使p指向a数组的第一个元素a[0];a[i],*(a+i),

p[i]

,*(p+i)

等价

。指针方式通过指向数组元素的指针变量访问所需元素。int

a[10],*p=&a[0];p++;p=&a[0]p++p++指向数组元素的指针通过指针引用数组a[7]a[8]下标法

#include

<stdio.h>intmain(

){ inta[10],

i;for(i=0;i<10;i++)scanf("%d",

&a[i]);printf("\n");for(i=0;i<10;i++)printf("%3d",a[i]);return

0;}例:输出数组全部元素。指针法

#include

<stdio.h>intmain(

){int

a[10],

i, *p=a;for(i=0;i<10;i++,p++)scanf(“%d”,

p);printf(“\n”);for(p=a;p<(a+10);

p++)printf(“%3d”,*p

);return

0;}*(a+i)

指针的运算指针的算术运算指针表达式与整数的加减运算指针自增自减运算指针的关系运算同类指针相减强制类型转换运算指针表达式与整数的加减运算一般形式p+n或 p-n其中:p是任意一个指针表达式,n是任何一种整型表达式。计算规则表达式

p+n

的值

=

p的值

+

p所指类型长度*n表达式

p-n的值

=

p的值 -

p所指类型长度*n说明:只有当p和p+n或p-n都指向连续存放的同类型数据区域(数组)时,指针加、减才有实际意义。C语言规定:表达式p+n和p-n的类型与p相同。p,ap+1,a+1p+i,a+ia[0]a[1]a[i]a数组*(p+i)例如:int

a[10],*p,*q;p=a;q=a+6;a[6]p+9,a+9a[9]q=a+6数组和指针的本质不同:数组名是指针常量,不能改变指针常量的值,a++;a+=2;a=p;

都是非法的。指针p是变量,若p指向数组的首地址,p+1代表该类型的下一变量的地址。语法后缀:

p++

; p--

;前缀:

++p

; --p

;⑴

进行++p或p++运算后都使p指向下一个数据表达式p++的值等于p的原来值;表达式++p的值等于p的新值;⑵取内容运算符“

*

”、取地址运算符“

&

”和自增自减运算符都是单目运算符,运算的优先级相同,结合方向都是自右至左

指针自增自减运算......p-3p-2p-1pp+1p+2..................数组a低地址高地址当两个指针指向同一个数组中的元素时,才能进行>、<、>=、<=、!=、==的关系运算。任何指针p与NULL进行“p==NULL”或“p!=NULL”运算均有意义:判断指针p

是否指向空。指针的关系运算只有同类指针进行比较才有意义。指针的关系运算例:inta[10],

*p;p=&a[4];a[4]

假定指针p和q指向同一个数组,则:p>

q:p>=q:p指针所指元素位于q所指元素之后时为1,反之为0。p指针所指元

素位于q所指元素之后(或两指针指向同一元素)时为1,反之为0。p==q:两指针指向同一元素时为

1,反之为0。p!=q:两指针不指向同一元素时为

1,反之为0。语法:

指针表达式 关系运算符 指针表达式==和!=运算符,比较两个指针表达式是否指向同一个内存单元;<、<=、>、>=,比较两个指针所指内存区域的先后次序。.语法

:p-q说明:同类指针相减时,两个指针应该指向连续存放的同类数据区域。p-q

的值,等于(p的值-q的值)/所指类型长度,

即p,

q两个指针之间数据元素的个数。例如:若有

int

a[10]

,*p, *q;p=a;q=&a[5];则

p-q=5,表示p,

q之间数据元素的个数是5。同类指针相减格式:(类型名

*) 指针表达式功能:将指针表达式的值转换成指定类型的指针。例如:int

*p;double d,

*q=&d;p=(int*

)q;强制类型转换运算[例8-3]用指针访问数组元素。#include

<stdio.h>intmain(

){inta[10],*pa,

i;for(i=0;i<10;i++)a[i]=i+1;pa=a;for(i=0;i<10;i++,pa++)printf("%d

",*pa);printf("\n");return

0;}不要忘记赋初值字符指针与字符串字符串的表示形式用字符数组表示,如:intmain(

){ charstring[]=“Ilove

China!”;printf(“%s\n”,string);return

0;}数组名用字符指针实现,如:intmain(

){ char*string=“IloveChina!”;printf(“%s\n”,string);return

0;}把“I

love

China!”的首地址赋给指针变量string特点:字符串的长度不受限制;字符指针指向别处,字符串将失踪。此字符串不能改变,只能读取。[例8-5]使用字符指针输出字符串。#include

<stdio.h>intmain(

){ char*p="C

Language";for(;*p!=′\0′;)putchar(*++p);return

0;}字符指针变量与字符数组的区别字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是字符串的首地址。赋值方式:

char

str[

]=“I

am

aboy!”或:

char

str[20];gets(str);字符指针变量指向字符串首地址。赋值方法三种:char*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论