| 变量在内存存放是有地址的,数组在内存存放也同样具有地址。对数组来说,数组名就是数组在内存安放的首地址。指针变量是用于存放变量的地址,可以指向变量,当然也可存放数组的首址或数组元素的地址,这就是说,指针变量可以指向数组或数组元素,对数组而言,数组和数组元素的引用,也同样可以使用指针变量。下面就分别介绍指针与不同类型的数组。 6.4.1指针与一维数组 假设我们定义一个一维数组,该数组在内存会有系统分配的一个存储空间,其数组的名字就是数组在内存的首地址。若再定义一个指针变量,并将数组的首址传给指针变量,则该指针就指向了这个一维数组。我们说数组名是数组的首地址,也就是数组的指针。而定义的指针变量就是指向该数组的指针变量。对一维数组的引用,既可以用传统的数组元素的下标法,也可使用指针的表示方法。 int a[10],*ptr;/*定义数组与指针变量*/ 做赋值操作: ptr=a;或ptr=&a[0]; 则ptr就得到了数组的首址。其中,a是数组的首地址,&a[0]是数组元素a[0]的地址,由于a[0]的地址就是数组的首地址,所以,两条赋值操作效果完全相同。指针变量ptr就是指向数组a的指针变量。 若ptr指向了一维数组,现在看一下C规定指针对数组的表示方法: 1)ptr+n与a+n表示数组元素a[n]的地址,即&a[n]。对整个a数组来说,共有10个元素,n的取值为0~9,则数组元素的地址就可以表示为ptr+0~ptr+9或a+0~a+9,与&a[0]~&a[9]保持一致。 2)知道了数组元素的地址表示方法,*(ptr+n)和*(a+n)就表示为数组的各元素即等效于a[n]。 3)指向数组的指针变量也可用数组的下标形式表示为ptr[n],其效果相当于*(ptr+n)。 [例6-5]/*以下标法输入输出数组各元素。 下面从键盘输入10个数,以数组的不同引用形式输出数组各元素的值。 #include <stdio.h>main()
 {
 int n,a[10],*ptr=a;
 for(n=0;n<=9;n++)
 scanf("%d",&a[n]);
 printf("1------output!\n");
 for(n=0;n<=9;n++)
 printf("%4d",a[n]);
 printf("\n");
 }
 运行程序: RUN1234567890¿
 1------output!
 1234567890
 [例6-6]采用指针变量表示的地址法输入输出数组各元素。 #include <stdio.h>main()
 {
 int n,a[10],*ptr=a;/*定义时对指针变量初始化*/
 for(n=0;n<=9;n++)
 scanf("%d",ptr+n);
 print f("2------output!\n");
 for(n=0;n<=9;n++)
 print f("%4d",*(ptr+n));
 print f("\n");
 }
 运行程序: RUN1234567890¿
 2------output!
 1234567890
 |