函数学习三

数组在函数间传参

全局数组传递方式
复制传递方式
实参为数组的指针,形参为数组名(本质是一个指针变量)
地址传递方式
实参为数组的指针,形参为同类型的指针变量

编写函数,计算一个一维整形数组的所有元素的和

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值