数组在函数间传参
1、学习目标
- 掌握数组在函数间传参的用法
- 程序举例
2、函数的传参-数组
- 全局数组传递方式
- 复制传递方式
- 实参为数组的指针,形参为数组名(本质是一个指针变量)
- 地址传递方式
- 实参为数组的指针,形参为同类型的指针变量。
3、程序举例
-
编写函数,计算一个一维整形数组的所有元素的和。
-
第一种写法:复制传递方式
#include <stdio.h> int array_sun(int data[], int n); int main() { 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 data[] = a;error int data[]本质上是一个指针 int array_sum(int data[], int n) { int ret = 0; int i; for(i = 0; i < n; i++){ printf("%d\n", data[i]); ret += data[i]; } return ret; }
运行结果:
$ ./app 5 9 10 3 10 sum = 37
-
第二种写法:指针传递方式
#include <stdio.h> int array_sun(int * data, int n); int main() { 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 * data= a;right 指针存地址 int array_sum(int * data, int n) { int ret = 0; int i; for(i = 0; i < n; i++){ printf("%d\n", data[i]); ret += data[i]; } return ret; }
运行结果:
$ ./app 5 9 10 3 10 sum = 37
-
-
编写函数,删除字符串中的空格
-
分析示意图:
-
程序如下:
void del_space(char * s1); int main() { //做删除操作需要进行修改,不能用字符串常量,需要用字符数组存字符串。 char s[] = " h a sdf g "; //char str = " s d g";error 字符串常量不能使用 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'; }
运行结果:
./app h a sdf g hasdfg
-