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 小时前
[SpringCloud][14]OpenFeign参数传递方法
后端·spring·spring cloud
onething3651 小时前
Spring Boot + Spring AI 从入门到实战:7天转型计划 Day 3 —— 消息表设计 + 级联删除 + 事务管理
人工智能·后端
荣江1 小时前
Hermes Agent 代码仓库打包工具使用指南(repomix-rs 高性能版)
后端
王某某人1 小时前
LangChain4j 入门:Java 程序员的第一个 AI 对话程序
人工智能·后端
码农刚子1 小时前
从零开始:在 Windows 服务器上部署 Node.js 项目(小白实战教程)
后端·node.js
Cache技术分享1 小时前
435. Java 日期时间 API - Clock 灵活获取当前时间
前端·后端
浩子coding1 小时前
通过 Spring AI Alibaba 源码,看如何玩转 ReAct 智能体范式
人工智能·后端
星浩AI1 小时前
合规项目大模型如何部署?硬件选型 + vLLM/LMDeploy 实战
pytorch·后端·llm
摇滚侠2 小时前
SpringMVC 入门到实战 DispatcherServlet 源码解读 92-95
java·后端·spring·maven·intellij-idea
码不停蹄的玄黓3 小时前
Spring Bean 生命周期
java·后端·spring