一个变量有地址,一个数组包含若干个元素,每个数组元素都在内存中占用储存单元,它们都有相应的地址。
指针变量既可以指向变量,也可以指向数组元素(把某一元素的地址放在一个指针变量中)。
所谓数组元素的指针就是数组元素的地址。
定义一个指向数组元素的指针变量的方法,与指向变量的指针变量相同。
例:int a[10];
int *p;
p=&a[0];
注:若数组为int型,则指针变量的基类型也为int型。
引用一个数组元素,可以用:
(1)下标法,如a[i]形式;
(2)指针法,如*(a+i)或*(p+i)。
基中的a是数组名,p是指向数组元素的指针变量,其初值p=a等价于p=&a[0]。
注:数组名即编译为数组的第一个元素的地址。
例:输出数组中的全部元素。
假设一个a数组,整型,有10个元素,要输出个元素的值有三种方法。
(1)下标法。
(2)通过数组名计算数组元素地址,找出元素的值。
(3)用指针变量指向数组元素。
下标法:
#include <stdafx.h> #include<stdio.h> void main() { int a[10],i; for(i=0;i<10;i++) { scanf("%d",&a[i]); } printf("\n"); for(i=0;i<10;i++) { printf("%d",a[i]); } }
指针法:
#include <stdafx.h> #include<stdio.h> void main() { int a[10],i; for(i=0;i<10;i++) { scanf("%d",&a[i]); } printf("\n"); for(i=0;i<10;i++) { printf("%d",*(a+i)); } }
指针变量法:
#include <stdafx.h> #include<stdio.h> void main() { int a[10],i,*p; for(i=0;i<10;i++) { scanf("%d",&a[i]); } p=a; printf("\n"); for(i=0;i<10;i++) { printf("%d",*p); p++; } }
思考:
#include <stdafx.h> #include<stdio.h> void main() { int a[10],i,*p; p=a; for(i=0;i<10;i++) { scanf("%d",&p++); } printf("\n"); for(i=0;i<10;i++,p++) { printf("%d",*p); } }
错误原因:&后必须接函数指示符
纠正:第十行改为 scanf("%d",&p+i);