多级指针
二级指针变量的说明形式如下。
数据类型 **指针名
c
int main() {
int a =10;
int *p = &a;
int **pp = &p;
printf("%d\n", **pp);
return 0;
}
多级指针+1,在64位系统下移动8个字节
多级指针的运用
c
int main() {
int a[] = {1, 2, 3, 4, 5};
int *p[5];
int n = sizeof(a) / sizeof(int);
int i;
int **q;
for (i = 0; i < n; i++) {
p[i] = &a[i];
}
q = p;
printf("%d %d %d",a[1],*p[1],*q[1]);
return 0;
}
多级指针和指针数组
c
int main() {
char *a[5] = {"beijin", "tianjin", "shanghai", "sichuan", "shanxi"};
char **b = a;
printf("%s %s\n",a[3],*b);//或者b[1]、*(b + 1)
return 0;
}
函数的基本用法
为了完成特定功能的代码模块,使其代码独立,通常要求有返回值,也可以是空置。
数据类型 函数名称 (参数){ return 0; }
c
int main() {
return 0;
}
判断输入数字大小写
c
int get_max (int a,int b) {
if(a > b) {
return a;
}
return b;
}
int main() {
int i,j;
scanf("%d %d",&i,&j);
int ret = get_max(i,j);
printf("%d\n",ret);
return 0;
}
一维数组在函数间传参
c
int fun_sum(int *data,int n) {
int i;
int sum = 0;
for(i = 0;i < n;i++) {
sum = data[i] + sum;
}
return sum;
}
int main() {
int a[] = {1, 2, 3, 4, 5};
int sum = 0;
sum = fun_sum(a, sizeof(a) / sizeof(int));
printf("%d\n", sum);
return 0;
}
什么是指针函数
特征是返回值为指针int *fun(int x, int y)因为()的优先级最高,所以fun与后面的括号结合,是函数名,调用它以后能得到一个int类型的指针。
指针函数函数的返回值为指针,
一般形式为 数据类型 *函数名称 (参数说明)
递归函数
- 递推阶段:从原问题出发,按递归公式递推从未知到已知,最终达到递归终止条件。
- 回归阶段:按递归终止条件求出结果,逆向逐步代入递归公式,回归到原问题求解
c
int fac(int n);
int main() {
int n;
scanf("%d", &n);
int ret = fac(n);
printf("%d != %d\n", n,ret);
return 0;
}
int fac(int n) {
if (n==1) return 1;
return n * fac(n-1);
}
预处理指令#define
- #define叫做宏定义语法格式
#define 名字 值 - 结尾没有分号
- 和#include一样,在预处理阶段执行,文本替换
- 值可以是数字、表达式、代码语句等
- 宏定义的好处、便于程序的阅读和维护 C
arduino
#include "stdio.h"
#define N 10
#define M (3+2)
#define S 3+2
int main(int argc, char *argv[]) {
int a[N] = {0};//创建一个大小为10的数组
a[0] = 100;
printf("%d\n", a[0]);//打印100
printf("%d\n", M * 2);//(3+2)* 2 = 10
printf("%d\n", S * 2);// 3 + 2 * 2 = 7
return 0;
}