一、数组名作为函数参数
如果一个实参的数组,想在函数中改变此数组的元素的值,实参和形参的对应关系可以有 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]=%d\n",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]=%d\n",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]=%d\n",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\n",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]=%d\n",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]=%d\n",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]=%d\n",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]=%d\n",a[0],a[1],a[2],a[3],a[4]);
}

C语言 数组的指针和指向数组的指针变量-2相关推荐

  1. 深入浅出C语言:(三)C 语言数组指针(指向数组的指针)

    目录 一.C 语言数组指针(指向数组的指针) 二.C 语言字符串指针(指向字符串的指针) 三.C 语言指针数组(数组每个元素都是指针) 四.二维数组指针(指向二维数组的指针) 五.指针数组和二维数组指 ...

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

    一.回顾二维数组和多维数组的概念 int a[3][4];  //二维数组 int a[2][3]4];  //多维数组 二.指向多维数组的指针和指针变量的探究 可以把a看成是一个一维数组,这个一维数 ...

  3. c++17(26)-数组、二维数组的指针、指向数组的指针、指向数组的指针的指针

    #include <iostream> #include <string.h> using namespace std;void setC1(int a[],int size) ...

  4. 指向数组的指针与指向数组首元素的指针

    我的主力博客:半亩方塘 以下原创内容,转载请注明地址,欢迎对以下内容提供不同参考意见: 指向数组的指针与指向数组首元素的指针究竟有什么区别呢?有人说,这二者不是一回事么?它们就是同一个东西啊!然而,事 ...

  5. 区分指向数组元素的指针、指向数组的指针、指针数组

    区分指向数组元素的指针.指向数组的指针.指针数组 指向数组元素的指针 这类指针比较常见,例如 int a[3] = {1, 2, 3}; int *p; p = a;//将数组的地址(也即数组首元素的 ...

  6. 指针详解(包含指针,指针数组,数组指针,指向数组指针的指针,函数指针,函数指针数组,指向函数指针数组的指针)

    大家都知道,指针有双面性,灵活度高,但是运用时一定要避免野指针和空指针的出现.否则会出现一些意想不到的错误.话不多说,看下面的代码: int main() {int arr[10] = { 0 };/ ...

  7. 二维数组的传参【01_数组指针_指向数组的指针】

    2021-04-08 二维数组的传参[01_数组指针_指向数组的指针] #include <stdio.h> #include <stdint.h> #include < ...

  8. 字符串的指针和指向字符串的指针变量

      引自:http://s319.dlut.edu.cn/educ/83.htm §8.4 字符串的指针和指向字符串的指针变量 8.4.1 字符串的表现形式 在C程序中,可以用两种方法实现一个字符串. ...

  9. 常指针和指向常量的指针

    最近在学习引用,有一些学习心得,记录如下: 1:引用是变量的别名 int a; int b&=a; 要注意引用只有声明,而没有定义,并且引用必须在声明的时候进行初始化,一旦与某个变量关联起来, ...

  10. [C++基础]018_常量指针和指向常量的指针

    先来看一下什么是常量指针,什么是指向常量的指针吧! 1. 常量指针定义 1 int * const ptr = new int(); 2. 指向常量的指针 1 const int* ptr; 上面已经 ...

最新文章

  1. C# 写Windows服务
  2. php的匿名函数和闭包函数
  3. 开发环境wamp3.06 + Zend studio 12 调试配置
  4. Bitmap尺度变换
  5. 【笔试面试】C#中的程序集
  6. 【java】java ssh 远程执行命令 并且获取执行的结果
  7. 一起等补丁:操作系统漏洞StrandHogg 2.0几乎影响所有安卓设备
  8. pdca管理循环基本主张_“PDCA”循环中的物业质量管理
  9. c语言1%3等于多少,%取余语句1%3等于多少的作用
  10. 自律不熬夜真的那么难吗?
  11. 【ACwing】一、基础算法:1.1 递归枚举(指数型)
  12. 京东快递 单号查询接口 C# .net
  13. 二层交换机和三层交换机的区别
  14. Python 输出对齐
  15. 八、python编写IP地址计算第一个可用IP地址、最后一个可用IP地址、网络号、广播地址、主机数
  16. 如何自学qt(5)——页面布局
  17. 计算机软件著作权的注册和认证
  18. 图像中里面的Ground Truth是什么意思
  19. AI.Roboform.Enterprise.v7.8.3.5-TE
  20. every()数组方法

热门文章

  1. shell编程实现:依次提示用户输入3个整数,脚本根据数字大小依次排序输出3个数字。
  2. 大人孩子都值得一看的20本经典绘本
  3. 20172327 2018-2019-1《程序设计与数据结构》课程总结
  4. 莫道君行早更有早来人(二)几点网络技术的想法
  5. 周边pd是什么意思_在韩国,PD是什么意思啊?
  6. win10 安装idea
  7. 什么是全栈【举例讲解】
  8. 报错:ImportError: Cannot load backend ‘TkAgg‘ which requires the ‘tk‘ interactive
  9. vue中非父子组件通信
  10. Docker搭建nextcloud使用云盘