一、递归调用函数
两个条件
1)递归规律
2)递归出口
二、全局变量、局部变量
局部变量:定义在函数内(包括形参)或者语句块内,作用域为函数结束或者语句块
全局变量:
定义在函数外,作用域为从定义位置开始到程序结束
三、指针
1、对变量的访问
两种方式
直接访问:通过变量名访问
间接访问:通过变量地址访问
指针变量
语法 类型 * 指针变量名
类型说明:任意合法的类型,指针变量的基类型,指针变量可以指向的变量类型。
2、引用
int a;
int *p=&a ;===*p等价于a
a=6;
*p=6;
3、指针变量作为函数参数
相当于传地址调用
注意:在使用指针变量p间接访问变量时,需要给该指针变量分配内存空间,必须被赋值。
4、引用数组
int a[10];
int *p=a;
等价关系:
1)p+i=== a+i =&a[i]=&p[i]
2)(p+i)===(a+i)==a[i]===p[i]
注意:
1)指针变量必须指向连续的内存空间,同时指针的移动不能超过数组的最后一个元素。
2)&后面只能跟变量名,*后面只能跟地址
5、遍历数组
方法1:下标
方法2:指针
int a[10];
int *p=a;
int i;
for(i=0;i<10;i++) //for(i=0;p<a+10;i++) //for(i=0;p<p+10;i++)
{scanf(“%d”,&p[i]);//scanf(“%d”,p+i);
printf(“%d”,p[i]);//printf(“%d”,*(p+i));
}
结合性:& * ++ --优先级相同,自右至左的结合性
通过指针引用字符串
1、字符数组
char ch[]=“hello”;
scanf("%s",ch);
printf("%s",ch);
2、字符指针变量
char *str=“hello”;//char * str; str=“hello”;
puts(str);//printf("%s",str);
四、结构体
1、类型定义:
语法:struct 结构体名{
类型 成员名//成员表列
} ;
结构体类型名首字母通常大写
2、定义结构体类型变量
1)先定义类型,在定义变量
struct Stu{
char name[20];
int num;
int age;
double score;
};
2)定义类型的同时,并定义变量
struct Stu{
char name[20];
int num;
int age;
double score;
}stu1,stu2;
3)直接定义变量(省略结构体类型名)
struct {
char name[20];
int num;
int age;
double score;
}stu1,stu2;
3、初始化以及引用
初始化:在定义的同时直接赋值
引用:结构体变量名.成员名
不可以整体引用结构体变量。
4、结构体数组
同普通的结构体类型变量的定义用法相似,此处不再赘述
5、结构体指针
1)指向结构体变量的指针
struct Stu2{
char name[20],
int num,
int age,
double score
};
struct Stu2 st1,st2;
struct Stu2 *p=& st1;
调用成员:
st1.num;
p->num;
(*p).num;
2)指向结构体数组的指针
struct Stu2{
char name[20],
int num,
int age,
double score
};
struct Stu2 st[30];
struct Stu2 *p=st;
调用成员:
st[i].num;
(p+i)->num;
( * (p+i) ).num;