在 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);
}
输出如下
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]);
}
输出如下
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));
}
输出如下
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
}
输出如下
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
}
输出如下