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

38 阅读2分钟

在 C 语言中,将数组传入函数时,实际上传递的是数组首元素的地址,而不是整个数组的拷贝。这意味着在函数内部对数组元素的修改会影响到原数组。

1.在定义函数的时候 如果形参是一个数组

#include<stdio.h>
//1.在定义函数的时候 如果形参是一个数组
//	 格式:类型 参数名[]

//编写一个函数,打印传入的数组中的所有元素
void printArr(int arr[],int n){
	for(int i=0;i<n;i++){
		printf("%d \n",arr[i]);
	} 
	
	
}
int main(){
	int arr1[]={1,2,3,4,5,6,7,8,9};
	
	//计算数组的元素个数     用数组的整体大小/单个元素大小
	int n_arr1=sizeof(arr1)/sizeof(int);
	printf("%d\n",n_arr1);
	 
	printArr(arr1,n_arr1);
	int arr2[3]={7,8,9};
	printArr(arr2,3);
	
} 

输出如下

image.png

2.如果在函数内部,修改了数组的元素,那么,原来的数组也会受到影响!

#include<stdio.h>
//2.如果在函数内部,修改了数组的元素,那么,原来的数组也会受到影响! 
void funArr(int arr[]){
	arr[0]=100;
	arr[1]=200; 
}
int main(){
	//int 类型的数组 
	int arr[]={1,2};
	printf("%d\n",arr[0],arr[1]);
	funArr(arr);
	printf("%d\n",arr[0],arr[2]);
}

输出如下

image.png

3.定义一个函数,它的参数数组,它的返回值是数组中的所有元素的和

#include<stdio.h>
/*
1.定义一个函数,它的参数数组,它的返回值是数组中的所有元素的和 
*/
int getArrSum(int arr[],int len){
	int sum=0;
	for(int i=0;i<len;i++){
		sum+=arr[i];
	}
	return sum;
} 
int main(){
	int arr[3]={1,2,3};
	printf("%d",getArrSum(arr,3));
}

输出如下

image.png

4.定义一个函数,它的参数是int数组,它的返回值是数组中的所有元素的最大值

#include<stdio.h>
int getArrSum(int arr[], int len){
    int sum = 0;
    for(int i = 0; i<len; i++){
        sum += arr[i];
    }
    return sum;
}

int getArrMax(int arr[], int len){
    // 假设法: 第一个元素是最大的
    int max = arr[0];
    for(int i=0;i<len;i++){
        if(arr[i] > max){
            max = arr[i];
        }
    }
    return max;
}

int main(){
    int arr[3] = {1,2,3};
    printf("相加和为%d \n", getArrSum(arr, 3)); // 6
    printf("最大值为%d \n", getArrMax(arr, 3)); // 3
}

输出如下

image.png

5.定义一个函数,它的参数是int数组,和要查找的值,如果在这个数组中,能找到,则返回第一个能找到的值的下标;如果找不到,则返回-1

#include<stdio.h>
int findArrValue(int arr[], int len, int val) {
    int idx = -1; // 假设找不到 
    for(int i=0;i<len;i++){
        if(arr[i] == val){
            idx = i;
            break;
        }
    }
    return idx;
}

int main(){
    int arr[3] = {10,10,10}; 
    printf("%d\n", findArrValue(arr, 3, 10)); // 0
    printf("%d\n", findArrValue(arr, 3, -10)); // -1
}

输出如下

image.png