栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

文章目录
  • 1. 调用函数
  • 2. 函数的说明
  • 2. 传参
    • 2.1 全局变量
    • 2.2 赋值传递
    • 2.3 地址传递
    • 2.4 数组传参
  • 3. main函数

1. 调用函数
数据类型 函数名称 (参数){
	pass;
	return (表达式)
}
  • 函数得写在main之前,先说明在调用
  • 例1,求 x n x^n xn
#include 
#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. 函数的说明
  • 函数可以放在主函数之后,但是需要在主函数之前说明函数
  • 可以省略形参但是不能省略类型
  • 例2:
#include 
#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;
}
2. 传参 2.1 全局变量
  • 在代码的任何地方都可以直接调用
  • 例3
#include 
#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;
}
2.2 赋值传递
  • 在形参中赋值是局部变量不是全局变量
  • 参考例1
2.3 地址传递
  • 按地址传递,实参为变量的地址,而形参为同类型指针
  • 被调用函数中对形参的操作。将直接改变实参的值
#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";
  • 统计小写字母个数
#include 

int 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;
}
  • 将小写字母改成大写字母
#include 

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;
}
2.4 数组传参
  • 全局变量
  • 地址传递方式
    • 举例:计算一个一维整型数组求和
//错误的写法
#include 

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 

正确的写法

#include 

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("%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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/926192.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号