数组与指针:
一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。
指针变量既然可以指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中)。
所谓数组元素的指针就是数组元素的地址。
定义一个指向数组元素的指针变量的方法,与以前介绍的指向变量的指针变量相同。
例如:
int a[10];(定义a为10个整型数据的数组)
int *p;(定义p为指向整型变量的指针变量)
注意
如果数组为int型,则指针变量的基类型亦应为int型。
p=&a[10];
把a[0]元素的地址赋给指针变量p。
也就是使p指向a数组的第0号元素。
引用一个数组元素,可以用:
(1)下标法:如a[i]形式;
(2) 指针法:如
*(a+i)
*(p+i)
其中的a是数组名,p是指向数组元素的指针变量,其初值p=a。
注意:数组名即“翻译成数组的第一个元素的地址。
具体示例:
#include<stdio.h>
int main()
{
int a[10];
int i;
printf("please input 10 numbers:\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
printf("output the 10 numbers again!\n");
for(i=0;i<10;i++)
{
printf("%d",*(a+i));
}
printf("\n");
}
代码分析:
for(i=0;i<10;i++)
{
printf("%d",*(a+i));
}
printf("\n");
这一段是重新输出输入的十个数,因为数组名a就是数组元素中的地址所以直接用取值符号*就可以进行10个数输出。
因此即便定义int *p;p=a;也是正确的。