指针与数组的关系

数组名是一个指针常量,其值一旦定义,就不可更改!!!他存放的是数组第一个元素的地址(即:入口地址)

例: 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 ;
}

yukikaze nano desu!