C语言 数组的指针和指向数组的指针变量-2

一、数组名作为函数参数
如果一个实参的数组,想在函数中改变此数组的元素的值,实参和形参的对应关系可以有 4 种:
(1)实参和形参都是数组名
a 是实参数组首地址,那么ba是形参数组首地址,a和ba共用一段内存,也就是说,在调用changvalue()函数期间,a和ba指的是同一个数组
#include<stdio.h>
void changevalue(int ba[])
{
    ba[3]=27;  //这是把内存赋值,所以这个值会被带回
    ba[4]=45;
    return;
}
int main()
{
    int a[5];   //能引用的下标:a[0]-a[4]
    a[0]=85;
    a[1]=70;
    a[2]=98;
    a[3]=92;
    a[4]=78;
    printf("a[0]=%d,a[1]=%d,a[2]=%da[3]=%d,a[4]=%dn",a[0],a[1],a[2],a[3],a[4]);
    changevalue(a);
    printf("-----------------------------------n");
    printf("a[0]=%d,a[1]=%d,a[2]=%da[3]=%d,a[4]=%dn",a[0],a[1],a[2],a[3],a[4]);
}
(2)实参用数组名,形参用指针变量
#include<stdio.h>
void changevalue(int *p)
{
    //注意:这一定要知道数组a的数组元素范围是a[0]-a[4],所以只能引用到*(p+4)
    *(p+2)=888;  //相当于给a[2]赋值。p+2表示a[2]的地址,*(p+2)表示a[2]的值
    return;
}
int main()
{
    int a[5];   //能引用的下标:a[0]-a[4]
    a[0]=85;
    a[1]=70;
    a[2]=98;
    a[3]=92;
    a[4]=78;
    printf("a[0]=%d,a[1]=%d,a[2]=%,da[3]=%d,a[4]=%dn",a[0],a[1],a[2],a[3],a[4]);
    changevalue(a);
    printf("-----------------------------------n");
    printf("a[0]=%d,a[1]=%d,a[2]=%d,a[3]=%d,a[4]=%dn",a[0],a[1],a[2],a[3],a[4]);
}
(3)实参和形参都用指针变量
#include<stdio.h>
void changevalue(int *p)
{
    //注意:这一定要知道数组a的数组元素范围是a[0]-a[4],所以只能引用到*(p+4)
    *(p+2)=888;  //相当于给a[2]赋值。p+2表示a[2]的地址,*(p+2)表示a[2]的值
    return;
}
int main()
{
    int a[5];   //能引用的下标:a[0]-a[4]
    a[0]=85;
    a[1]=70;
    a[2]=98;
    a[3]=92;
    a[4]=78;
    printf("a[0]=%d,a[1]=%d,a[2]=%d,a[3]=%d,a[4]=%dn",a[0],a[1],a[2],a[3],a[4]);
    int *pa=a;        //把数组a的首地址给 pa,然后传递pa过去【数组a的首地址就是a[0]的地址】
    changevalue(pa);  //实参是指针变量,则该指针变量必须有确定的值
    printf("-----------------------------------n");
    printf("a[0]=%d,a[1]=%d,a[2]=%d,a[3]=%d,a[4]=%dn",a[0],a[1],a[2],a[3],a[4]);
}
(4)实参为指针和形参为数组名(把指针传递给数组名,那这个数组名就相当于这个数组的首地址)
理解为:把形参数组名也当成指针看待,是一个指向数组a的首地址的指针。
#include<stdio.h>
void changevalue(int ba[])
{
    //注意:这里引用下标时,也不能超过main中定义的a数组,可引用的下标是a[0]-a[4]
    ba[3]=987;  //这是把内存赋值,所以这个值会被带回
    ba[4]=465;
    return;
}
int main()
{
    int a[5];   //能引用的下标:a[0]-a[4]
    a[0]=85;
    a[1]=70;
    a[2]=98;
    a[3]=92;
    a[4]=78;
    printf("a[0]=%d,a[1]=%d,a[2]=%d,a[3]=%d,a[4]=%dn",a[0],a[1],a[2],a[3],a[4]);
    int *pa=a;        //把数组a的首地址给 pa,然后传递pa过去【数组a的首地址就是a[0]的地址】
    changevalue(pa);  //实参是指针变量,则该指针变量必须有确定的值
    printf("-----------------------------------n");
    printf("a[0]=%d,a[1]=%d,a[2]=%d,a[3]=%d,a[4]=%dn",a[0],a[1],a[2],a[3],a[4]);
}

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>