62、一维数组用于函数的参数

本文介绍了C++中指针如何表示数组,以及在一维数组作为函数参数时的处理方法。重点讲解了如何通过指针访问数组元素和注意事项,如sizeof运算符在不同情况下的使用。
摘要由CSDN通过智能技术生成

1)指针的数组表示

在C++内部,用指针来处理数组。

C++编译器把   数组名[下标]  解释为  *(数组首地址+下标)

C++编译器把   地址[下标]  解释为  *(地址+下标)

2)一维数组用于函数的参数

一维数组用于函数的参数时,只能传数组的地址,并且必须把数组长度也传进去,除非数组中有最后一个元素的标志。

书写方法有两种:

void func(int* arr, int len);

void func(int arr[], int len);

注意:

在函数中,可以用数组表示法,也可以用指针表示法。

在函数中,不要对指针名用sizeof运算符,它不是数组名。

1)指针的数组表示

在C++中,数组可以通过指针来处理。实际上,数组名在大多数情况下被视为指向数组第一个元素的指针。因此,数组的元素可以通过指针运算来访问。

示例代码:

#include <iostream>
using namespace std;

int main() {
    int numbers[5] = {10, 20, 30, 40, 50};

    // 数组名作为指针
    cout << "第一个元素: " << *numbers << endl; // 输出 10

    // 通过指针运算访问数组元素
    cout << "第三个元素: " << *(numbers + 2) << endl; // 输出 30

    return 0;
}

上面的代码展示了如何使用指针的数组表示法来访问数组元素。numbers 在没有下标的情况下被视为指向数组首元素的指针。

2)一维数组用于函数的参数

当一维数组作为函数参数时,实际上传递的是数组的首地址(即指针)。为了在函数内部正确处理数组,还需要传递数组的长度。

示例代码:

#include <iostream>
using namespace std;

// 函数声明,使用指针表示数组
void printArray(int* arr, int len) {
    for (int i = 0; i < len; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

// 函数声明,使用数组表示法
void modifyArray(int arr[], int len) {
    for (int i = 0; i < len; i++) {
        arr[i] += 5;  // 每个元素增加5
    }
}

int main() {
    int numbers[] = {1, 2, 3, 4, 5};
    int len = sizeof(numbers) / sizeof(numbers[0]);

    printArray(numbers, len);
    modifyArray(numbers, len);
    printArray(numbers, len);

    return 0;
}

在这个例子中,printArray 函数用于打印数组元素,而 modifyArray 函数则修改数组中的每个元素。注意,sizeof 运算符只能在定义数组的同一作用域内使用来获取数组的总大小,而不能在接收数组指针的函数中使用来确定数组长度。

注意事项

  • 在函数参数中使用 int arr[]int* arr 是等价的。
  • 传递给函数的数组实际上是通过指针进行的,所以在函数内部使用 sizeof(arr) 将不会返回数组的实际大小,而是返回指针的大小。因此,必须额外传递数组的长度或者某种形式的结束标志。

这样的处理方式确保了数组操作的灵活性和效率。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
函数的定义 什么是函数? •函数就是定义在类中的具有特定功能的一段独立小程序。 •函数也称为方法。 函数的格式: •修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,...) { 执行语句; return 返回值; } 返回值类型:函数运行后的结果的数据类型。 参数类型:是形式参数的数据类型。 形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。 实际参数:传递给形式参数的具体数值。 return:用于结束函数。 返回值:该函数运算后的结果,该结果会返回给调用者。 函数的特点 定义函数可以将功能代码进行封装 便于对该功能进行复用 函数只有被调用才会被执行 函数的出现提高了代码的复用性 对于函数没有具体返回值的情况,返回值类型用关键字void表示, 那么该函数中的return语句如果在最后一行可以省略不写。 注意: •函数中只能调用函数,不可以在函数内部定义函数。 •定义函数时,函数的结果应该返回给调用者,交由调用者处理。 函数的应用 两个明确 •明确要定义的功能最后的结果是什么? •明确在定义该功能的过程中,是否需要未知内容参与运算 示例: •需求:定义一个功能,可以实现两个整数的加法运算。 •分析: •该功能的运算结果是什么?两个数的和,也是一个整数(int) •在实现该功能的过程中是否有未知内容参与运算?加数和被加数是不确定的。(两个参数int,int) •代码: int getSum(int x,int y) { return x+y; } 函数的重载(overload) 重载的概念 在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。 重载的特点: 与返回值类型无关,只看参数列表。 重载的好处: 方便于阅读,优化了程序设计。 重载示例: //返回两个整数的和 int add(int x,int y){return x+y;} //返回三个整数的和 int add(int x,int y,int z){return x+y+z;} //返回两个小数的和 double add(double x,double y){return x+y;} 函数的功能一样,仅仅是参与运算的未知内容不同时, 可以定义多函数,却使用统一函数名称,这样方便阅读。 在调用时,虚拟机通过参数列表的不同来区分同名函数。 数组 数组的定义 概念 同一种类型数据的集合。其实数组就是一个容器。 数组的好处 可以自动给数组中的元素从0开始编号,方便操作这些元素。 格式1: 元素类型[]  数组名 = new 元素类型[元素个数或数组长度]; 示例:int[] arr = new int[5]; 格式2: 元素类型[] 数组名 = new 元素类型[]{元素,元素,……}; int[] arr = new int[]{3,5,1,7}; int[] arr = {3,5,1,7}; 数组内存结构 内存结构 Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,有对空间进行了不同区域的划分,因 为每一片区域都有特定的处理数据方式和内存管理方式。 栈内存   用于存储局部变量,当数据使用完,所占空间会自动释放。 堆内存   数组和对象,通过new建立的实例都存放在堆内存中。   每一个实体都有内存地址值   实体中的变量都有默认初始化值   实体不在被使用,会在不确定的时间内被垃圾回收器回收 方法区,本地方法区,寄存器 数组操作常见问题   数组脚标越界异常(ArrayIndexOutOfBoundsException) int[] arr = new int[2]; System.out.println(arr[3]); 访问到了数组中的不存在的脚标时发生。   空指针异常(NullPointerException) int[] arr = null; System.out.println(arr[0]); arr引用没有指向实体,却在操作实体中的元素时。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值