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;
}
相关推荐
HONG````7 小时前
HarmonyOS ArkUI RelativeContainer 相对定位布局:ID 锚点与 alignRules 实战
后端
Conan在掘金7 小时前
�鸿蒙报错速查:Cannot find name 'AppStorageV2',忘 import 编译就炸,根因 + 眜解法
后端
夏雪coding7 小时前
Dify 自定义插件实战:FastAPI + localtunnel 30 分钟搭一个天气查询工具
后端·ai编程
用户69371750013847 小时前
Claude Code终端日志Token占用实测:一个过滤器砍掉60%-90%
android·前端·后端
dear_bi_MyOnly7 小时前
【SpringBoot配置文件】
java·spring boot·后端·学习·spring·java-ee·学习方法
一缕清烟在人间8 小时前
HarmonyOS应用开发实战:萌宠日记 - 健康提醒列表与动态数据绑定
后端
HONG````8 小时前
HarmonyOS 6.1 实战:Stack 层叠布局与 Overlay 浮层详解
后端
程序员cxuan9 小时前
离谱,GPT-5.6 竟然在后台执行了 rm -rf
人工智能·后端·程序员
Csvn9 小时前
📊 SQL 入门 Day 9:CTE(公用表表达式)— 让 SQL 像写代码一样优雅
后端·sql
运维行者_9 小时前
如何查看每个IP的带宽使用情况?NetFlow 技术实战指南
开发语言·网络·分布式·后端·架构·带宽