首页 百科知识 一维数组的指针和指向一维数组的指针变量

一维数组的指针和指向一维数组的指针变量

时间:2024-09-22 百科知识 版权反馈
【摘要】:数组元素的指针是指数组中某个具体元素的地址。数组的指针则是数组的首地址,也叫起始地址,是数组中最开头那个元素的地址。必须保证数组类型和指针变量所指向的变量类型保持一致。程序中,p++表示指针变量p使用完毕后,指向下一个数组元素。*(p++)表示先得到*p的值,然后使p指向下一个数组元素。在C语言程序中,数组名代表该数组的地址,可以用数组名或指向数组的指针变量作为函数的参数。

7.3.1 一维数组的指针和指向一维数组的指针变量

1.数组的指针与数组元素的指针

数组元素的指针是指数组中某个具体元素的地址。数组的指针则是数组的首地址,也叫起始地址,是数组中最开头那个元素的地址。C语言程序中,数组名本身就代表该数组的首地址。

例7.5

img448

img449

程序运行结果如下:

img450

从本例题中可以看出a和&a[0],b和&b[0]是同一个值。因为a,b为数组名,分别代表数组a和数组b的首地址,事实上,数组a和数组b的首地址就是&a[0] 和&b[0]的值。由于数组中各元素是按顺序存放的,a+1表示a数组中下一个元素的地址(指针),也就是说,a+1 和&a[1]是同一个值。

2.指向数组元素的指针变量的定义与赋值

定义一个指向数组元素的指针变量的方法一般如下:

类型说明符 数组名[常量表达式];

类型说明符*指针变量名;

例如:

img451

注意:

必须保证数组类型和指针变量所指向的变量类型保持一致。如果数组为int型,则指针变量应指向int型;如果数组为float型,则指针变量应指向float型。

对指向数组的指针变量赋值有两种方法:将数组的地址赋给指针变量和将数组元素的地址赋给指针变量。

例如:

img452

可以在定义指针变量时,给指针变量赋初值。

例如:int a[10];

int *p=a;

3.指针法引用数组元素

假定:

img453

那么:

①a代表数组a的首地址&a[0],p的值也是&a[0],*p和*a则表示a[0]。

②a+1的值是&a[1],p+1的值也是&a[1],*(a+1)和*(p+1)则表示a[1]。

③a+i的值是&a[i],p+i的值也是&a[i],*(a+i)和*(p+i)则表示a[i]。由此可以推断出:a[i]和*(a+i)等价,a+i和&a[i]等价;p[i]和*(p+i)等价,&p[i]和p+i等价。所以,引用数组元素有两种方法:

img454

上述文字可用图7-6来形象地表示。

img455

图7- 6

④数组中元素a[i]的实际地址为:a+i*d,d为一个数组元素所占的字节数。

例如:如果a=2001;则元素a[5]的实际地址为2001+5*2,即2011。因为一个int型数据占2个字节。

⑤p是指针变量,可以进行递增和递减运算,例如:p++;p--;是合法的,但a不能进行递增和递减运算,例如:a++;a--是非法的。因为a是数组名,代表首地址,在程序中是固定不变的,不能进行递增和递减运算。

例7.6 用指针法输入输出数组元素的值。

程序如下:

img456

程序运行结果如下:

img457

上面程序中,a为数组名,代表该数组的首地址,是一个常量。a的值是不能够随意改变的,因此不能出现a++或++a。

例7.6的程序可以写成下面的指针法形式,其结果仍然不变。

程序如下:

img458

程序运行结果如下:

img459

例7.6的程序还可以写成下面的指针法形式,其结果也是不变的。

程序如下:

img460

程序运行结果如下:

img461

程序中,p++表示指针变量p使用完毕后,指向下一个数组元素。*(p++)表示先得到*p的值,然后使p指向下一个数组元素。

例7.7 用冒泡法对数组进行从小到大排序。

前面讲过用下标法对数组进行冒泡法排序,现在可以用指针法来进行冒泡法排序。

程序如下:

img462

img463

程序运行结果如下:

img464

另外 例7.7中的程序还可以写成下面的形式,其结果仍然不变。

程序如下:

img465

程序运行结果如下:

img466

在C语言程序中,数组名代表该数组的地址,可以用数组名或指向数组的指针变量作为函数的参数。所以,例7.7中的程序还可以写成下面的形式,其结果仍然不变。

程序如下:

img467

img468

程序运行结果如下:

img469

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

我要反馈