概述
# <1> 一般函数的声明
下面是一个 求两个整型变量之和的函数
函数运算完是返回一个整型值 所以函数的类型为 int
使用函数时要先声明
#include <stdio.h>
/*
函数怎么写?
返回值类型 函数名 (参数)
返回值类型一定要写 不确定或者没有返回值可以写 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 = %dn",num);
return 0;
}
int add(int a,int b) // 函数头 声明函数时可以直接复制 这段 加个分号;
{
a = a + b ;
return (a); //返回值 也可以去掉括号 return a;
}
# <2> 函数与数组调用
这里有实参与形参的概念
实参就是实际的参数
形参就是形式上的参数
一般来说 像上一篇代码 main函数为主函数 而 add()为子函数 主函数的是实参 子函数的是形参
形参只是实参的一个副本 无论形参怎么变 不会影响实参的数值。
但是如果为指针类型的函数呢?
实参将一个存放着数据的地址传给形参
而在子函数中如果改变了形参的地址上的变量 就会等同于影响了实参的地址上的变量
因为地址是一样的
#include <stdio.h>
//声明函数
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 <stdio.h>
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%sn",ch);
look_up(ch,len,num_sz);
printf(" 字母一共有 = %dn 数字一共有 = %dn 空格一共有 = %dn 其他字符一共有 = %dn ",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<len ; i++)
{
if( ('a' <= ch[i] && ch[i] <= 'z' )|| ('A' <= ch[i] && ch[i] <= 'Z' ))
//判断字符是否为字母字符
{
num_ch++;
}
else if('0' <= ch[i] && ch[i] <= '9' )
{
num_in++;
}
else if(ch[i] == ' ' )
{
num_kong++;
}
else
{
num_other++;
}
}
//将各个字符的数值 赋给整型数组
num_sz[0] = num_ch;
num_sz[1] = num_in;
num_sz[2] = num_kong;
num_sz[3] = num_other;
return num_sz; //返回整型数组的地址
}
最后
以上就是感动航空为你收集整理的C语言学习 函数的定义和调用的全部内容,希望文章能够帮你解决C语言学习 函数的定义和调用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复