c语言基础:多级指针、函数的基本用法、预处理#define

多级指针

二级指针变量的说明形式如下。

数据类型 **指针名

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;
}
相关推荐
百万蹄蹄向前冲1 小时前
Trae Genimi3跟着官网学实时通信 Socket.io框架
前端·后端·websocket
狂炫冰美式2 小时前
TRAE SOLO 驱动:重构AI模拟面试产品的复盘
前端·后端·面试
x***38164 小时前
springboot和springframework版本依赖关系
java·spring boot·后端
韩立学长5 小时前
基于Springboot课堂教学辅助系统08922bq1(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
盖世英雄酱581365 小时前
java深度调试技术【第六七八章:宽字节与多字节】
java·后端
望道同学7 小时前
PMP/信息系统项目管理师 9 张 思维导图【考试必备】
前端·后端·程序员
码事漫谈7 小时前
C++11到C++23语法糖万字详解
后端
码事漫谈7 小时前
别人的C#看着难受?可能是你不清楚这些语法糖
后端
+VX:Fegn08958 小时前
计算机毕业设计|基于springboot+vue的学校课程管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计