C语言--数组作为函数参数

为方便在程序中对数组操作,经常会定义一些操作数组的功能函数,这些函数往往会将数组作为函数参数使用。

一、要求:

复制代码
1.保证形参与实参的数组是相同的数据类型
2.有明确的数组说明:数组维数、长度
c 复制代码
void func1(int arr[5]);
void func2(int arr[],int n);  # n表示数组长度

# 调用函数,直接传入对应的数组作为实参
func1(arr[5]);
func2(arr[],5);

注意:在形参中改变数组中的元素,实参中的数组元素也会改变

在多维数组作为函数参数时,可以指定多维数组中每一维的长度,也可以省去多维数组中第一维的长度。示例:

c 复制代码
void func1(int arr[3][4]);
void func2(int arr[][4],int n)
# 调用函数
func1(arr[3][4]);
func2(arr,3);

二、 数组作为函数参数的 3 种等价写法

C 语言允许多种写法声明数组参数,但底层逻辑完全一致(都等价于指针),新手可以优先用最直观的写法:

c 复制代码
#include <stdio.h>

// 写法1:最直观(推荐新手),用数组形式声明
void func1(int arr[], int len) {
    arr[0] = 99; // 修改原数组第一个元素
}

// 写法2:指定数组长度(仅作提示,编译器会忽略这个长度)
void func2(int arr[10], int len) {
    arr[1] = 88; // 修改原数组第二个元素
}

// 写法3:显式指针形式(底层等价写法,进阶常用)
void func3(int *arr, int len) {
    arr[2] = 77; // 修改原数组第三个元素
}

int main() {
    int nums[] = {1,2,3,4,5};
    int len = sizeof(nums)/sizeof(nums[0]); // 仅在原数组定义处能正确计算长度
    
    func1(nums, len);
    func2(nums, len);
    func3(nums, len);
    
    // 输出:99 88 77 4 5(原数组被修改)
    for(int i=0; i<len; i++) {
        printf("%d ", nums[i]);
    }
    return 0;
}

关键解释

  • 写法 2 中的int arr[10]里的10没有实际意义,哪怕你传的数组长度是 5,编译器也不会报错;
  • 三种写法的汇编代码完全一致,本质都是接收int*类型的指针。
相关推荐
Yu_Lijing1 小时前
网络复习篇——网络基础(一)
网络·c++·笔记
Bella的成长园地1 小时前
为什么c++中的条件变量的 wait() 函数需要配合while 循环或谓词?
c++·面试
charlee441 小时前
为什么现代 C++ 库都用 PIMPL?一场关于封装、依赖与安全的演进
c++·智能指针·raii·pimpl·编译防火墙·封装设计
MSTcheng.1 小时前
CANN ops-math算子的跨平台适配与硬件抽象层设计
c++·mfc
code monkey.1 小时前
【Linux之旅】Linux 进程间通信(IPC)全解析:从管道到共享内存,吃透进程协作核心
linux·c++·ipc
薛定谔的猫喵喵1 小时前
基于C++ Qt的唐代诗歌查询系统设计与实现
c++·qt·sqlite
阿昭L1 小时前
C++异常处理机制反汇编(三):32位下的异常结构分析
c++·windows·逆向工程
Cinema KI1 小时前
C++11(下) 入门三部曲终章(基础篇):夯实语法,解锁基础编程能力
开发语言·c++
燃于AC之乐1 小时前
深入解剖STL List:从源码剖析到相关接口实现
c++·stl·list·源码剖析·底层实现
汉克老师1 小时前
GESP2025年6月认证C++二级( 第一部分选择题(9-15))
c++·循环结构·求余·gesp二级·gesp2级·整除、