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;
}
相关推荐
子兮曰2 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰2 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
爱勇宝2 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
胡写代码2 天前
别再前后端各写一套表单校验了
java·后端
大勇前进2 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu2 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile2 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
大白802 天前
PHP 内存溢出排查思路:看懂报错日志,精准定位问题
后端
二月龙2 天前
PHP 接口返回统一响应封装,让前后端对接更省心
后端
盖伦发发2 天前
软件工程SOLID 五大设计原则
后端·软件工程