- 1. 调用函数
- 2. 函数的说明
- 2. 传参
- 2.1 全局变量
- 2.2 赋值传递
- 2.3 地址传递
- 2.4 数组传参
- 3. main函数
数据类型 函数名称 (参数){
pass;
return (表达式)
}
- 函数得写在main之前,先说明在调用
- 例1,求 x n x^n xn
#include2. 函数的说明#include double power(double x, int n){ double res=x; for (int i=0; i res *= res; } return res; } int main(int argc, char *argv[]) { double res = power(1.3, 2); printf("%fn", res); return -1; }
- 函数可以放在主函数之后,但是需要在主函数之前说明函数
- 可以省略形参但是不能省略类型
- 例2:
#include2. 传参 2.1 全局变量#include double power(double, int); //第一种方式声明 double power(double x, int n); //第二种方式声明 double power(double y, int m); //第三种方式声明 int main(int argc, char *argv[]) { double res = power(1.3, 2); printf("%fn", res); return -1; } double power(double x, int n){ double res=x; for (int i=0; i res *= res; } return res; }
- 在代码的任何地方都可以直接调用
- 例3
#include2.2 赋值传递#include double x = 2; int n = 3; double power(){ double res=x; for (int i=0; i res *= res; } return res; } int main(int argc, char *argv[]) { double res = power(); printf("%fn", res); return -1; }
- 在形参中赋值是局部变量不是全局变量
- 参考例1
- 按地址传递,实参为变量的地址,而形参为同类型指针
- 被调用函数中对形参的操作。将直接改变实参的值
#include#include void swap(int *x, int *y ); int main(int argc, char *argv[]) { int a = 1, b = 2; printf("a = %d, b = %dn", a, b); swap(&a, &b); printf("a = %d, b = %dn", a, b); return -1; } void swap(int *x, int *y){ int t = *x; *x = *y; *y = t; }
- 但是需要注意的是,对字符串来说char *s="str"是不能作为参数并改变的,因为这是字符串常量,因此我们需要用字符串数组来代替char s[]="str";
- 统计小写字母个数
#includeint str_fun(const char *p); int main(int argc, char *argv[]) { char s[] = "HelloWord!"; int n; n = str_fun(s); printf("n=%dn", n); return 0; } int str_fun(const char *p){ int num = 0; while (*p!=' '){// while (*p) if (*p <= 'z' && *p >='a') num++; p++; } return num; }
- 将小写字母改成大写字母
#include2.4 数组传参int str_fun(char *p); int main(int argc, char *argv[]) { char s[] = "HelloWord!"; int n; n = str_fun(s); printf("n=%d s=%sn", n, s); return 0; } int str_fun(char *p){ int num = 0; while (*p!=' '){// while (*p) if (*p <= 'z' && *p >='a'){ num++; *p -= 32; } p++; } return num; }
- 全局变量
- 地址传递方式
- 举例:计算一个一维整型数组求和
//错误的写法 #includeint array_sum(int a[]); int main(int argc, char *argv[]) { int a[] = {1, 2, 3, 4, 5, 6}; int sum = 0; sum = array_sum(a); return 0; } int array_sum(int a[]){ //这里是声明了一个数组,传参传进来的是一个数组是不成立的。 //int a[] = a;相当于把一个数组名赋给了一个数组 //这句话其实相当于 int * a = a;指针存地址 int ret = 0; int i; for (i = 0; i 正确的写法
#includeint array_sum(int *a, int length); int main(int argc, char *argv[]) { int a[] = {1, 2, 3, 4, 5, 6}; int sum = 0, length = sizeof(a)/sizeof(int); sum = array_sum(a, length); printf("%dn", sum); return 0; } //int array_sum(int a[], int length){ int array_sum(int *a, int length){ int ret = 0; int i; for (i = 0; i 3. main函数
- main函数中argc指的是输入的参数数量,argv指的是输入的参数,可以通过循环从终端取参数
#include#include int main(int argc, char *argv[]) { int i; printf("输入的参数数量 argc=%dn", argc); printf("输入的参数是:n"); for(i=0; i printf("%sn", argv[i]); } return -1; } 在终端输入
./bit abc def返回
输入的参数数量(argc)=3 输入的参数(argv): ./bit abc def



