回文数
// 回文数放数组里
int main(){
int i=0,j,k=1,num,a[20];
scanf("%d",&num);
while(num){a[i]=num%10;num/=10;i++;}
for(j=0;j<i/2;j++){if(a[j]!=a[i-j-1]){k=0;break;}}
k?printf("是回文"):printf("不是回文");
}
定义
// 函数是一块代码,接收(零个或多个)参数,做一件事情,返回(零个或一个)值
int sum(int begin,int end){
}
// 括号里void是明确告诉编译器,这个函数不接收任何参数
void f(void)
// 调用函数时,即使没有参数,调用的时候也需要()
// return做两件事情:
// 1.一旦遇到return,函数就停止了,不再往下执行
// 2.如果return后面有值,就送回一个值
// 函数返回的值可以赋给变量,也可以把这个值再传递给函数,甚至还可以丢掉
函数的声明
当自己写的函数在main函数后边时,要先进行声明
#include<stdio.h>
int max(int a,int b);// 先进行声明
int main() {
printf("%d",max(21 ,45));
}
// definition
int max(int a,int b) {
}
// 函数头加个分号就是原型声明
// 函数的原型声明里可以不写参数的名字
void sum(int,int);
参数传递
C语言调用函数,只有值传递
调用函数时必须传给它数量、类型正确的值
C语言在这块不严谨,传的值和参数的类型不匹配时,编译器会悄悄的替你把类型转换好。但这可能会出错
C++/Java在这方面比较严格
swap(a,b);
printf("a=%d,b=%d\n",a,b);
// 每个函数有自己的变量空间,函数的参数也位于这个独立的空间中,和其他函数没有关系
void swap(int x,int y) {
int t=x;x=y;y=t;
}
本地变量
函数的每一次运行就会产生一个独立的变量空间,在这个空间中的变量是函数的这一次运行所独有的,称作本地变量
定义在函数内部的变量就是本地变量
本地变量就是局部变量,写在函数的参数表里的参数也是本地变量
生存期和作用域
生存期: 什么时候这个变量开始出现了,到什么时候它消亡了
作用域: 什么范围内可以访问这个变量
对于本地变量,这两个是一样的: 大括号内
本地变量/局部变量:
定义在块内,函数块,语句块,大括号内
生存期和作用域都在这个块内
局部变量没有默认值
main函数和swap函数各自都有一个独立的变量空间,离开main去调用swap的时候,其实就是离开了main函数的变量空间
swap函数里的a和b,和main函数里的a和b没有任何关系,他们不在同一个变量空间
int main() {
int a=5,b=6;
if(a<b) {
int i=10;
// 定义在if语句块里的变量,生存期和作用域都是在这个块里,离开if语句,i这个变量就不存在了
printf("%d",i);
}
i++;// 在这个括号的外面使用i ,就会报错undeclared
}
// 甚至可以随便拉一对大括号来定义变量
// 这样程序也是没有任何问题的
{int j;}