> 文章列表 > 9.5 数组的指针和指向数组的指针变量-2

9.5 数组的指针和指向数组的指针变量-2

9.5 数组的指针和指向数组的指针变量-2

9.5 数组指针和指向数组的指针变量-2

  • 一.数组名作为函数参数
    • (1)实参和形参都是数组名
    • (2)实参用数组名,形参用指针变量
    • (3)实参和形参都用指针变量,这个和(2)很类似
    • (4)实参为指针,形参为数组名
  • 二.整理来源

一.数组名作为函数参数

如果一个实参的数组,想在函数中改变此数组的元素的值,实参和形参的对应关系可以 有4种:

(1)实参和形参都是数组名

a是实参数组首地址,那么ba是形参数组首地址,a和ba共用一段内存,也就是说,在调用changevalue期间,a和ba指的是同一个数组。

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] = %d,a[3] = %d,a[4] = %d",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] = %d",a[0],a[1],a[2],a[3],a[4]);return;
}

(2)实参用数组名,形参用指针变量

void changevalue(int *p)
{//这里要注意,一定要指定数组a的数组元素范围是a[0]-a[4],这意味着你最多能够引用到的是*(p+4)*(p+2) = 888;   //等价于给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] = %d",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] = %d",a[0],a[1],a[2],a[3],a[4]);return;
}

(3)实参和形参都用指针变量,这个和(2)很类似

void changevalue(int *p)
{//这里要注意,一定要指定数组a的数组元素范围是a[0]-a[4],这意味着你最多能够引用到的是*(p+4)*(p+2) = 888;   //等价于给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] = %d",a[0],a[1],a[2],a[3],a[4]);int *pa = a;     //把数组a的首地址给pa,然后传递pa过去(定义时初始化)changevalue(pa); //实参是指针变量,则该指针变量必须有确定的值。printf("-------------------------------------------------------------------------\\n");printf("a[0] = %d,a[1] = %d,a[2] = %d,a[3] = %d,a[4] = %d",a[0],a[1],a[2],a[3],a[4]);return;
}

(4)实参为指针,形参为数组名

把指针传递给数组名,那这个数组名就相当于这个数组的首地址。
换一种理解方式:把形参数组名也当成指针看待,是一个指向数组a的首地址的指针。

void changevalue(int ba[])
{//这里要注意,ba引用数组下标时也不能超过main中定义的a数组,可引用数组元素范围是a[0]-a[4]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] = %d,a[3] = %d,a[4] = %d",a[0],a[1],a[2],a[3],a[4]);int *pa = a;     //把数组a的首地址给pa,然后传递pa过去(定义时初始化)changevalue(pa); //实参是指针变量,则该指针变量必须有确定的值。printf("-------------------------------------------------------------------------\\n");printf("a[0] = %d,a[1] = %d,a[2] = %d,a[3] = %d,a[4] = %d",a[0],a[1],a[2],a[3],a[4]);return;
}

9.5 数组的指针和指向数组的指针变量-2

二.整理来源

整理至https://appd872nnyh9503.pc.xiaoe-tech.com/index的笔记