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;
}

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

目录
相关文章
|
1月前
|
人工智能 并行计算 安全
从零到一,打造专属AI王国!大模型私有化部署全攻略,手把手教你搭建、优化与安全设置
【10月更文挑战第24天】本文详细介绍从零开始的大模型私有化部署流程,涵盖需求分析、环境搭建、模型准备、模型部署、性能优化和安全设置六个关键步骤,并提供相应的示例代码,确保企业能够高效、安全地将大型AI模型部署在本地或私有云上。
386 7
|
12天前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
1月前
|
人工智能 安全 网络安全
揭秘!大模型私有化部署的全方位安全攻略与优化秘籍,让你的AI项目稳如磐石,数据安全无忧!
【10月更文挑战第24天】本文探讨了大模型私有化部署的安全性考量与优化策略,涵盖数据安全、防火墙配置、性能优化、容器化部署、模型更新和数据备份等方面,提供了实用的示例代码,旨在为企业提供全面的技术参考。
94 6
|
2月前
|
人工智能 数据安全/隐私保护 UED
RAG让AI大模型更懂业务解决方案部署使用体验
根据指导文档,部署过程得到了详细步骤说明的支持,包括环境配置、依赖安装及代码示例,确保了部署顺利进行。建议优化知识库问题汇总,增加部署失败案例参考,以提升用户体验。整体解决方案阅读与部署体验良好,有助于大型语言模型在特定业务场景的应用,未来可加强行业适应性和用户隐私保护。
66 5
|
1月前
|
人工智能 分布式计算 数据可视化
大模型私有化部署全攻略:硬件需求、数据隐私、可解释性与维护成本挑战及解决方案详解,附示例代码助你轻松实现企业内部AI应用
【10月更文挑战第23天】随着人工智能技术的发展,企业越来越关注大模型的私有化部署。本文详细探讨了硬件资源需求、数据隐私保护、模型可解释性、模型更新和维护等方面的挑战及解决方案,并提供了示例代码,帮助企业高效、安全地实现大模型的内部部署。
84 1
|
1月前
|
人工智能 分布式计算 数据可视化
大模型私有化部署全攻略:硬件需求、数据隐私、可解释性与维护成本挑战及解决方案详解,附示例代码助你轻松实现企业内部AI应用
【10月更文挑战第23天】随着人工智能技术的发展,大模型在各领域的应用日益广泛。然而,将其私有化部署到企业内部面临诸多挑战,如硬件资源需求高、数据隐私保护、模型可解释性差、更新维护成本高等。本文探讨了这些挑战,并提出了优化硬件配置、数据加密、可视化工具、自动化更新机制等解决方案,帮助企业顺利实现大模型的私有化部署。
86 1
|
2月前
|
C语言
【c语言】指针就该这么学(3)
本文介绍了C语言中的函数指针、typedef关键字及函数指针数组的概念与应用。首先讲解了函数指针的创建与使用,接着通过typedef简化复杂类型定义,最后探讨了函数指针数组及其在转移表中的应用,通过实例展示了如何利用这些特性实现更简洁高效的代码。
20 2
|
2月前
|
C语言
如何避免 C 语言中的野指针问题?
在C语言中,野指针是指向未知内存地址的指针,可能引发程序崩溃或数据损坏。避免野指针的方法包括:初始化指针为NULL、使用完毕后将指针置为NULL、检查指针是否为空以及合理管理动态分配的内存。
|
2月前
|
C语言
C语言:哪些情况下会出现野指针
C语言中,野指针是指指向未知地址的指针,通常由以下情况产生:1) 指针被声明但未初始化;2) 指针指向的内存已被释放或重新分配;3) 指针指向局部变量,而该变量已超出作用域。使用野指针可能导致程序崩溃或不可预测的行为。
|
2月前
|
编译器 C语言
【c语言】指针就该这么学(2)
本文详细介绍了指针与数组的关系,包括指针访问数组、一维数组传参、二级指针、指针数组和数组指针等内容。通过具体代码示例,解释了数组名作为首元素地址的用法,以及如何使用指针数组模拟二维数组和传递二维数组。文章还强调了数组指针与指针数组的区别,并通过调试窗口展示了不同类型指针的差异。最后,总结了指针在数组操作中的重要性和应用场景。
22 0