C语言-函数-学习笔记09

本文详细介绍了C语言中的函数使用,包括函数定义、调用、参数传递等。重点讲解了赋值传递、地址传递和数组参数的传递方式,并通过示例代码解释了如何进行操作。此外,还提到了main函数及其参数的意义,以及如何从终端接收参数。
摘要由CSDN通过智能技术生成

1. 调用函数

数据类型 函数名称 (参数){
	pass;
	return (表达式)
}
  • 函数得写在main之前,先说明在调用
  • 例1,求 x n x^n xn
#include <stdio.h>
#include <string.h>

double power(double x, int n){
	double res=x;
	for (int i=0; i<n; i++){
		res *= res;
	}
	return res;
}

int main(int argc, char *argv[])
{
	double res = power(1.3, 2);
	printf("%f\n", res);

	return -1;
}

2. 函数的说明

  • 函数可以放在主函数之后,但是需要在主函数之前说明函数
  • 可以省略形参但是不能省略类型
  • 例2:
#include <stdio.h>
#include <string.h>

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("%f\n", res);

	return -1;
}

double power(double x, int n){
	double res=x;
	for (int i=0; i<n; i++){
		res *= res;
	}
	return res;
}

2. 传参

2.1 全局变量

  • 在代码的任何地方都可以直接调用
  • 例3
#include <stdio.h>
#include <string.h>

double x = 2;
int n = 3;


double power(){
	double res=x;
	for (int i=0; i<n; i++){
		res *= res;
	}
	return res;
}

int main(int argc, char *argv[])
{
	double res = power();
	printf("%f\n", res);
	return -1;
}

2.2 赋值传递

  • 在形参中赋值是局部变量不是全局变量
  • 参考例1

2.3 地址传递

  • 按地址传递,实参为变量的地址,而形参为同类型指针
  • 被调用函数中对形参的操作。将直接改变实参的值
#include <stdio.h>
#include <string.h>

void swap(int *x, int *y );

int main(int argc, char *argv[])
{
	int a = 1, b = 2;
	printf("a = %d, b = %d\n", a, b);
	swap(&a, &b);
	printf("a = %d, b = %d\n", a, b);
	return -1;
}

void swap(int *x, int *y){
	int t = *x;
	*x = *y;
	*y  = t;
}
  • 但是需要注意的是,对字符串来说char *s="str"是不能作为参数并改变的,因为这是字符串常量,因此我们需要用字符串数组来代替char s[]="str";
  • 统计小写字母个数
#include <stdio.h>

int str_fun(const char *p);

int main(int argc, char *argv[])
{
	char s[] = "HelloWord!";
	int n;

	n = str_fun(s);
	printf("n=%d\n", n);
	return 0;
}

int str_fun(const char *p){
	int num = 0;
	while (*p!='\0'){// while (*p)
		if (*p <= 'z' && *p >='a')
			num++;
		p++;
	}
	return num;
}
  • 将小写字母改成大写字母
#include <stdio.h>

int str_fun(char *p);

int main(int argc, char *argv[])
{
	char s[] = "HelloWord!";
	int n;

	n = str_fun(s);
	printf("n=%d s=%s\n", n, s);
	return 0;
}

int str_fun(char *p){
	int num = 0;
	while (*p!='\0'){// while (*p)
		if (*p <= 'z' && *p >='a'){
			num++;
			*p -= 32;
		}
		p++;
	}
	return num;
}

2.4 数组传参

  • 全局变量
  • 地址传递方式
    • 举例:计算一个一维整型数组求和
//错误的写法
#include <stdio.h>

int 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<sizeof(a)/sizeof(int); i++)
		ret += a[i];
}

正确的写法

#include <stdio.h>

int 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("%d\n", 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<length; i++)
		ret += a[i];
	return ret;
}

3. main函数

  • main函数argc指的是输入的参数数量,argv指的是输入的参数,可以通过循环从终端取参数
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
	int i;

	printf("输入的参数数量 argc=%d\n", argc);

	printf("输入的参数是:\n");
	for(i=0; i<argc; i++){
		printf("%s\n", argv[i]);
	}

	return -1;
}

在终端输入

./bit abc def

返回

输入的参数数量(argc)=3
输入的参数(argv):
./bit
abc
def
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值