指针与数组的关系
数组名是一个指针常量,其值一旦定义,就不可更改!!!他存放的是数组第一个元素的地址(即:入口地址)
例: int a[5];
&a[0] | → | |||||
指向 | &a[0] | &a[1] | &a[2] | &a[3] | &a[4] |
数组名与下标的关系
若:a是数组名
则:指针常量a保存了a[0]的地址→a就指向了a[0]→*a就是a[0] a+i保存了a+i的地址→a+i就指向了a[i]→ *a(a+i)就是a[i]
程序例:
int main(void)
{
int a[5] = {1,2,3,4,5};
int i; //定义循环变量i(表示:物理下标)
//遍历打印所有数组元素的值
for(i=0;i<5,i++)
printf("%d\n",a[i]);
for(i=0;i<5,++i)
printf("%d\n",*(a+i));//a+i保存了a[i]的地址a+i就指向了a[i],*(a+i)就是a[i
return 0;
}
指针变量与数组下标的关系
已知:a是一个数组名(指针变量),p是一个指针变量
若:p=a
则:指针变量p保存了a[0]的地址→p指向了a[0]→*p就是a[0]
p+i保存了a[i]的地址→p+i就指向了a[i]→*p+i就是p [i]
程序例:
int main(void)
{
int a[5] = {1,2,3,4,5};
int i; //定义循环变量i(表示:物理下标)
int *p;//定义指针变量p
p=a;//初始化指针变量p:让p保存数组的入口地址 即:数组第一个元素的地址&a[0]
//遍历打印所有元素的值
for(i=0;i<5;++i)
printf("%d\n",p[i]);//p[i]就是a[i]
for(i=0;i<5;++i)
printf("%d\n",*(p+i));//*(p+i))就是*(a+i)),就是p[i]或a[i]
return 0;
}
程序小结:若p=a,则a怎么用p就可以怎么用!!
确定一个函数对数组进行处理,则需要几个参数?
两个参数:数组名和数组长度
举例:已知某程序框架
int main(void)
{
int array[10];//定义数组
.
.
.
f(array,10);//调用函数(请问:传递了几个实参)
return 0;
}
f(int &pArr,int len)//定义函数等价于f(int parr[],int Len)
{
}
接下来,我们把这个程序框架具体化
int main(void)
{
int arry[10];
int i;
for(i=0;i<10;++i)
scanf("%d",&arry[i]);//输入13579----19↓
f(arry,10);//调用函数
return 0;
}
void f(int *arr,int n)
{
printf("%d\n",*arr);//请问:打印结果为 :1
arr = arr+3;
printf("%d",*arr)//请问:打印结果为:7
printf("%d\n",*(arr+1));//9
printf("%d",arr[1]);//9
return ;
}