c语言基础回顾-指针 | AI工程化部署

简介: 为什么要在这里回顾下C/C++的基础知识,无疑是因为它的高效性。

1.写在前面

为什么要在这里回顾下C/C++的基础知识,无疑是因为它的高效性。

C语言是一种高效、快速、通用的编程语言,起源于1972年,由贝尔实验室的Dennis Ritchie和Ken Thompson共同开发。最初,C语言的设计是为了开发Unix操作系统,它在计算机领域的发展中起到了至关重要的作用。

C语言的应用场景非常广泛,在操作系统开发(Linux、Unix),嵌入式开发,数据库开发(MySQL、SQLite),编译器和网络驱动程序,游戏开发(Unity游戏引擎等)以及应用程序开发等各方面都发挥的重要中。同时C语言在深度学习的各大框架pytorch,tensorflow,mxnet也扮演着举足轻重的作用。

同样,在AI工程化部署中也十分重要。

所以这里我们发一些章节快速的回顾下c、c++的重要概念和技术。

2. 指针

在C语言中,指针是一种非常重要的概念,它允许我们直接访问内存中的数据。下面是指针的基本使用方法:

指针:指针是一个变量,它存储的是另一个变量的内存地址。我们可以通过指针来访问和修改这个变量的值。

int num = 10;  // 定义一个整型变量
int *p;       // 定义一个指向整型变量的指针

p = #     // 将指针p指向变量num的地址

printf("%d\n", *p);  // 输出变量num的值,使用间接访问运算符*

指针索引:指针可以用来遍历数组,通过改变指针的值来访问数组中的元素。

int arr[] = {
   1, 2, 3, 4, 5};  // 定义一个整型数组
int *p = arr;                 // 将指针p指向数组的第一个元素

for (int i = 0; i < 5; i++) {
   
    printf("%d ", *(p + i));  // 输出数组元素的值,使用指针索引
}

指针数组:指针数组是一个数组,其中的每个元素都是一个指针。

int num1 = 10;
int num2 = 20;
int num3 = 30;

int *arr[] = {
   &num1, &num2, &num3};  // 定义一个指针数组,存储三个指针

for (int i = 0; i < 3; i++) {
   
    printf("%d ", *(*arr[i]));  // 输出指针指向的变量的值
}

和&符号的使用:在指针操作中,符号用来声明一个指针变量,或者用来访问指针指向的变量;&符号用来取得变量的地址。

int num = 10;     // 定义一个整型变量
int *p = &num;   // 将指针p指向变量num的地址

printf("%d\n", *p);  // 输出变量num的值

int *ptr;        // 声明一个指针变量

指针的指针:指针的指针是指一个指针变量存储了另一个指针变量的地址。

int num = 10;       // 定义一个整型变量
int *p = &num;     // 将指针p指向变量num的地址
int **pp = &p;     // 将指针pp指向指针p的地址

printf("%d\n", **pp);  // 输出变量num的值

这些是指针的基本使用方法和相关概念,通过这些例子,你可以更好地理解和掌握指针的用法。

指针的指针在某些特殊场景下非常有用,它可以用来实现多级间接访问和动态内存分配。下面是指针的指针的一些特别应用场景的例子:

函数参数传递:指针的指针可以用于通过函数参数来修改原始指针的值。

void changeValue(int **pp) {
   
    int *p = *pp;  // 获取指针pp指向的指针
    *p = 20;       // 修改指针p指向的变量的值
}

int main() {
   
    int num = 10;
    int *p = &num;
    changeValue(&p);
    printf("%d\n", *p);  // 输出20,原始指针的值被修改
    return 0;
}

动态内存分配:指针的指针可以用于动态分配多维数组或指针数组。

int main() {
   
    int rows = 3;
    int cols = 4;
    int **matrix = (int **)malloc(rows * sizeof(int *));  // 分配二维指针数组的内存空间

    for (int i = 0; i < rows; i++) {
   
        matrix[i] = (int *)malloc(cols * sizeof(int));  // 分配每一行的内存空间
    }

    // 使用指针的指针访问和修改数组元素
    for (int i = 0; i < rows; i++) {
   
        for (int j = 0; j < cols; j++) {
   
            matrix[i][j] = i + j;
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    // 释放内存空间
    for (int i = 0; i < rows; i++) {
   
        free(matrix[i]);
    }
    free(matrix);

    return 0;
}

字符串数组的排序:指针的指针可以用于对字符串数组进行排序。

#include <stdio.h>
#include <string.h>

void sortStrings(char **strArr, int length) {
   
    for (int i = 0; i < length - 1; i++) {
   
        for (int j = i + 1; j < length; j++) {
   
            if (strcmp(strArr[i], strArr[j]) > 0) {
   
                char *temp = strArr[i];
                strArr[i] = strArr[j];
                strArr[j] = temp;
            }
        }
    }
}

int main() {
   
    char *names[] = {
   "John", "Alice", "Bob", "David", "Cindy"};
    int length = sizeof(names) / sizeof(names[0]);

    sortStrings(names, length);

    for (int i = 0; i < length; i++) {
   
        printf("%s\n", names[i]);
    }

    return 0;
}

这些是指针的指针的一些特别应用场景的例子。通过使用指针的指针,我们可以实现更灵活和高效的编程。

目录
相关文章
|
4月前
|
存储 机器学习/深度学习 算法
​​LLM推理效率的范式转移:FlashAttention与PagedAttention正在重塑AI部署的未来​
本文深度解析FlashAttention与PagedAttention两大LLM推理优化技术:前者通过分块计算提升注意力效率,后者借助分页管理降低KV Cache内存开销。二者分别从计算与内存维度突破性能瓶颈,显著提升大模型推理速度与吞吐量,是当前高效LLM系统的核心基石。建议收藏细读。
920 125
|
3月前
|
人工智能 物联网 调度
边缘大型AI模型:协作部署与物联网应用——论文阅读
论文《边缘大型AI模型:协作部署与物联网应用》系统探讨了将大模型(LAM)部署于边缘网络以赋能物联网的前沿框架。针对传统云端部署高延迟、隐私差的问题,提出“边缘LAM”新范式,通过联邦微调、专家混合与思维链推理等技术,实现低延迟、高隐私的分布式智能。
835 6
边缘大型AI模型:协作部署与物联网应用——论文阅读
|
3月前
|
人工智能 测试技术 API
构建AI智能体:二、DeepSeek的Ollama部署FastAPI封装调用
本文介绍如何通过Ollama本地部署DeepSeek大模型,结合FastAPI实现API接口调用。涵盖Ollama安装、路径迁移、模型下载运行及REST API封装全过程,助力快速构建可扩展的AI应用服务。
1129 6
|
4月前
|
人工智能 Ubuntu 前端开发
Dify部署全栈指南:AI从Ubuntu配置到HTTPS自动化的10倍秘籍
本文档介绍如何部署Dify后端服务及前端界面,涵盖系统环境要求、依赖安装、代码拉取、环境变量配置、服务启动、数据库管理及常见问题解决方案,适用于开发与生产环境部署。
1039 1
|
5月前
|
人工智能 弹性计算 自然语言处理
云速搭 AI 助理发布:对话式生成可部署的阿里云架构图
阿里云云速搭 CADT(Cloud Architect Design Tools)推出智能化升级——云小搭,一款基于大模型的 AI 云架构助手,致力于让每一位用户都能“动动嘴”就完成专业级云架构设计。
741 31
|
3月前
|
机器学习/深度学习 人工智能 监控
Java与AI模型部署:构建企业级模型服务与生命周期管理平台
随着企业AI模型数量的快速增长,模型部署与生命周期管理成为确保AI应用稳定运行的关键。本文深入探讨如何使用Java生态构建一个企业级的模型服务平台,实现模型的版本控制、A/B测试、灰度发布、监控与回滚。通过集成Spring Boot、Kubernetes、MLflow和监控工具,我们将展示如何构建一个高可用、可扩展的模型服务架构,为大规模AI应用提供坚实的运维基础。
327 0
|
3月前
|
消息中间件 人工智能 安全
云原生进化论:加速构建 AI 应用
本文将和大家分享过去一年在支持企业构建 AI 应用过程的一些实践和思考。
910 48
|
4月前
|
人工智能 安全 中间件
阿里云 AI 中间件重磅发布,打通 AI 应用落地“最后一公里”
9 月 26 日,2025 云栖大会 AI 中间件:AI 时代的中间件技术演进与创新实践论坛上,阿里云智能集团资深技术专家林清山发表主题演讲《未来已来:下一代 AI 中间件重磅发布,解锁 AI 应用架构新范式》,重磅发布阿里云 AI 中间件,提供面向分布式多 Agent 架构的基座,包括:AgentScope-Java(兼容 Spring AI Alibaba 生态),AI MQ(基于Apache RocketMQ 的 AI 能力升级),AI 网关 Higress,AI 注册与配置中心 Nacos,以及覆盖模型与算力的 AI 可观测体系。
1117 52
|
3月前
|
人工智能 运维 Kubernetes
Serverless 应用引擎 SAE:为传统应用托底,为 AI 创新加速
在容器技术持续演进与 AI 全面爆发的当下,企业既要稳健托管传统业务,又要高效落地 AI 创新,如何在复杂的基础设施与频繁的版本变化中保持敏捷、稳定与低成本,成了所有技术团队的共同挑战。阿里云 Serverless 应用引擎(SAE)正是为应对这一时代挑战而生的破局者,SAE 以“免运维、强稳定、极致降本”为核心,通过一站式的应用级托管能力,同时支撑传统应用与 AI 应用,让企业把更多精力投入到业务创新。
551 30