理论教育 指针与一维数组关系解析,以及指向数组元素的指针的表示方法

指针与一维数组关系解析,以及指向数组元素的指针的表示方法

时间:2023-11-05 理论教育 版权反馈
【摘要】:前面的类型标识符表示该指针变量所指向的变量的类型。以指针与一维数组的关系为例加以说明。3)指向数组元素的指针,也可以表示成数组的形式,如p[i]与*(p+i)等价。

指针与一维数组关系解析,以及指向数组元素的指针的表示方法

学习过C语言的读者都明白,如果不能用指针编写有效、正确和灵活的程序,可以认为没有学好C语言。指针、地址数组及其相互关系是C语言中最有特色的部分。规范地使用指针,可以使程序达到简单明了。因此,不但要学会如何正确地使用指针,还要学会在各种情况下正确地使用指针变量

1.指针变量的定义

变量在计算机内是占有一定存储区的,变量的值就存放在这块区域之中.在计算机内部,通过访问或修改这块区域的内容来访问或修改相应的变量。在C语言中,对于变量的访问形式之一,就是先找到变量的地址,然后再通过该地址对变量进行访问,这就是指针及其指针变量。所谓变量的指针,实际上是指变量的地址。变量的地址在形式上好像是一个整数,表示变量所在的地址,它属于一种新的数据类型,即指针类型。

C语言中,若M为一整型变量,则表达式&M的类型是指向整数的指针,而它的值是变量M的地址。一般用“指针”来指明这样一个表达式&M的类型,而用“地址”作为它的值。所以,指针和地址是用来叙述一个对象的两个方面。可以用下述方法来定义一个指针类型的变量:

int*address;

它的含义是,定义address是一指针类型的变量,注意在定义中不要漏写符号*,否则就成为定义一般的整型变量了。在定义中的关键字int表示该指针变量为指向整型数据的指针类型的变量,有时也可称address为指向整数的指针。address是一个变量,它用于存放整型变量的地址。指针变量定义的格式为:

类型标识符 *标识符

其中标识符是指针变量的名字,标识符前面加了“*”号,表示该变量是指针变量。前面的类型标识符表示该指针变量所指向的变量的类型。一个指针变量只能指向同一种类型的变量。

2.指针变量的使用

指针变量只能存放地址,因此,不要企图将一个整数赋给一个指针变量。

例如:

int*address;

address=1000;

这种赋值是不合法的。指针变量正确的使用方法如下:

int i;

int*address;

定义了一个整型变量i,还定义了一个指向整型数的指针变量address。i中可以存放整数,而address中只能存放整型变量的地址。可以把i的地址赋给address。

address=&i;

此时指针变量address指向整型变量i。

3.指针与数组

指针和数组有着密切的关系,任何能由数组下标完成的操作也都可用指针来实现,但程序中使用指针可使代码更紧凑、更灵活。以指针与一维数组的关系为例加以说明。

例如,定义一个整型数组和一个指向整型的指针变量:

int a[10],*p;

首先将数组0元素的地址赋给指针p:

p=&a[0];(www.daowen.com)

C语言中,数组名就是数组的第0号元素的地址,因此下面两个语句是等价的:

p=&a[0];

p=a;

此时,p指向数组中的第0号元素,即a[0],指针变量p中包含了数组元素a[0]的地址,由于数组元素在内存中是连续存放的,因此,就可以通过指针变量p及其有关运算间接访问数组中的任何一个元素。

例如:a+1为a[1]的地址;a+i就是a[i]的地址。

采用指针访问数组元素的地址和内容有以下几种表示形式:

1)p+i和a+i均表示a[i]的地址,或者说它们均指向数组第i号元素,即指向a[i]。

2)*(p+i)和*(a+i)都表示p+i和a+i所指对象的内容,即为a[i]。

3)指向数组元素的指针,也可以表示成数组的形式,如p[i]与*(p+i)等价。

4.字符指针

C语言中,字符串常量是由双引号括起来的字符序列,例如:

“MyString”

这就是一个字符串常量,该字符串由8个字符序列组成。在程序中如出现字符串常量,C编译程序就给字符串常量分配一个存储区域,这个区域是静态的,在整个程序运行的过程中始终占用。平时所理解的字符串常量的长度是指该字符串的字符个数,但在安排存储区域时,C编译程序还自动给该字符串序列的末尾加上一个字符串结束符“\0”,用来标志字符串的结束,因此一个字符串常量所占存贮区空间的字节数总比它的字符个数多一个字节。

C语言中操作一个字符串常量的方法有:

1)把字符串常量存放在一个字符数组之中,例如:

char c Temp[]=“Mystring”;

数组c Temp共有9个元素,其中c Temp[8]中的内容是“\0”。在字符数组定义的过程中,C编译程序直接把字符串复写到数组中,即对数组c Temp进行初始化。

2)用字符指针指向字符串,然后通过字符指针来访问字符串存储区域。

当字符串常量在表达式中出现时,根据数组的类型转换原则,它被转换成字符指针。例如,当定义了一字符指针p CharPoint:

char*pChar Point;

可用做如下操作:

pChar Point=“Mysting”;

即,将p CharPoint指向字符串常量中的第0号字符M,此后可通过p CharPoint来访问这一存储区域,如*pChar Point或pChar Point[0]就是字符M,而pChar Point[i]或*(p CharPoint+i)就相当于字符串的第i号字符。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈