C语言学习 函数的定义和调用

# <1> 一般函数的声明

下面是一个 求两个整型变量之和的函数

函数运算完是返回一个整型值 所以函数的类型为 int

使用函数时要先声明

 

 

#include 
/*
函数怎么写?

返回值类型 函数名 (参数) 

	返回值类型一定要写 不确定或者没有返回值可以写 void
		例如 void add(int a,int b)
	参数列表可要可不要 也可以写不同变量 可以写void 也可以不写
{
	函数内容;
}

*/

int add();                 //声明函数 方法一
//int add(int,int);       声明函数 方法二
//int add(int a,int b);   声明函数 方法三


int main(void)
{
	int x = 25,y = 15;
        int num = 0;
        num = add(x,y);
	printf("x + y = %d\n",num);


	return 0;

}


int add(int a,int b)    //   函数头    声明函数时可以直接复制 这段 加个分号;
{

	a = a + b ;       
	return (a);     //返回值  也可以去掉括号 return a; 
} 

 

 # <2>  函数与数组调用

这里有实参与形参的概念

实参就是实际的参数

形参就是形式上的参数

一般来说 像上一篇代码  main函数为主函数 而 add()为子函数  主函数的是实参 子函数的是形参

形参只是实参的一个副本 无论形参怎么变 不会影响实参的数值。

 

但是如果为指针类型的函数呢?

实参将一个存放着数据的地址传给形参

而在子函数中如果改变了形参的地址上的变量 就会等同于影响了实参的地址上的变量

因为地址是一样的

 

 

 

 

 

 

#include 

//声明函数	
char cha(char *);
char cha1(char *);

int main(void)
{

		
	
	char ch[5] = {'a','b','c','d','e'}; //定义一个含有五个元素的一维数组
	char *ch_p = NULL;  				//指针指向空地址 以防野指针出现
	ch_p = ch;							//将指针指向ch字符数组的首元素地址
	char ch_1,ch_2;                     //定义两个char变量 接受函数的char返回值
	ch_1 = cha(ch);
	ch_2 = cha1(ch);

	printf("cha = %c \n",ch_1);
	printf("cha1 = %c \n",ch_2);
    printf("\n");
	return 0;

}
  //因为main函数的实参传的是地址,所以形参接受的地址上保存着同一个数据 。
char cha(char *ch)
{

	return ch[3]; //  输出第四个字符
}

char cha1(char ch[5])
{
	//不建议弄这个定义 因为从内存的角度设置的变量越少越好
	/*
	char c = 0;
	c = ch[3];
	*/
	
	return *(ch + 2);  //  输出第三个字符
}

 

 

#<3> 如何让函数返回多个相同类型的值

 函数只能返回一个值

如果想经过函数从而得到多个值

有两个方法

一个是将变量设置为全局变量 ,但是由于全局变量可以在所有函数中都可以使用,从而其值的变化不确定,所以要慎用。

一个是设置一个数组进行储存 返回值设为一个数组 

 

题目为输入一个字符串 ,通过实参传入子函数 统计出字符串的字母 数字 空格 其他字符的个数 并在主函数打印出来

#include 

int *look_up (char *,int,int *); //声明函数 

int main(void)
{
	unsigned int len;
	char ch[200] = {0};    //定义一个一维字符数组,数组内包含着200个字符元素 
	int num_sz[4] = {0};   //定义一个一维整型数组,数组内包含4个整型元素
	int num_ch,num_in,num_kong,num_other;//定义 字符个数 数字个数 空格个数 其他字符个数
	printf("请输入一串字符:\n");
	fgets(ch,200,stdin);               
	len = strlen(ch);

	printf("你输入的字符串为 : \n%s\n",ch);
	look_up(ch,len,num_sz);
	
	printf(" 字母一共有 = %d\n 数字一共有 = %d\n 空格一共有 = %d\n 其他字符一共有 = %d\n ",num_sz[0],num_sz[1],num_sz[2],num_sz[3]);
	
	return 0;
}

int *look_up(char *ch,int len,int *num_sz)    
{
	int num_ch = 0,num_in = 0,num_kong = 0,num_other = -1;
 //其他字符 -1 的原因是要把回车给去掉
	int i = 0;
	for(i = 0 ; i

 

你可能感兴趣的:(C语言学习 函数的定义和调用)