数组在函数间传参
全局数组传递方式
复制传递方式
实参为数组的指针,形参为数组名(本质是一个指针变量)
地址传递方式
实参为数组的指针,形参为同类型的指针变量
编写函数,计算一个一维整形数组的所有元素的和
#include <stdio.h>
int array_sum(int * data, int n);
int main(int argc, char *argv[])
{
int a[] = {5, 9, 10, 3, 10};
int sum = 0;
sum = array_sum(a, sizeof(a)/sizeof(int));
printf("sum=%d\n", sum);
return 0;
}
int array_sum(int * data, int n) //int * data = a;
{//int n = sizeof(a)/sizeof(int);
int ret = 0;
int i;
for (i = 0; i < n;i++) {
printf("%d\n", data[i]);
ret += data[i];
}
return ret;
}
编写函数,删除字符串中的空格
#include <stdio.h>
void del_space(char * s1);
int main(int argc, char *argv[])
{
char s[] = " h a sdf g ";
puts(s);
del_space(s);
puts(s);
return 0;
}
void del_space(char * s1)
{
char * s2;
s2 = s1;
while (*s1) {
if (*s1 == ' '){
s1++;
}
else {
*s2 = *s1;
s1++;
s2++;
}
}
*s2 = '\0';
}
多维数组与函数
多维数组作为参数在函数间的传递也有全局数组、复制传递和地址传递三种方式。
编写函数,计算一个二维整形数组的所有元素的和
有点难参考
https://blog.csdn.net/qq_42366672/article/details/127072153
https://blog.csdn.net/tianya_lu/article/details/103695496
第一版 无指针
#include<stdio.h>
int arr_sum(int p[][5],int k,int i);
int main(int argc, const char *argv[])
{
int arr[2][5]={{1,2,3,4,5},{5,4,3,2,1}};
int sum=0;
sum=arr_sum(arr,2,5);
printf("sum=%d\n",sum);
return 0;
}
int arr_sum(int p[][5],int k,int i)
{
int sum=0,j,l;
for (j=0;j<k;j++)
{
for(l=0;l<i;l++)
{
sum+=p[j][l];
}
}
return sum;
}
带指针如下 五星难度
参考文章https://www.cnblogs.com/DWVictor/p/10036632.html
#include<stdio.h>
int arr_sum(int **p,int k,int i);
int main(int argc, const char *argv[])
{
int arr[2][5]={{1,2,3,4,5},{5,4,3,2,1}};
int *p[2];
p[0]=arr[0];
p[1]=arr[1];
int sum=0;
sum=arr_sum(p,2,5);
printf("sum=%d\n",sum);
return 0;
}
int arr_sum(int **p,int k,int i)
{
int sum=0,j,l;
for (j=0;j<2;j++)
{
for(l=0;l<5;l++)
{
sum+=p[j][l];
}
}
return sum;
}