写点什么

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

作者:AIWeker
  • 2023-11-23
    福建
  • 本文字数:2017 字

    阅读完需:约 7 分钟

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

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;}
复制代码


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

发布于: 刚刚阅读数: 3
用户头像

AIWeker

关注

InfoQ签约作者 / 公众号:人工智能微客 2019-11-21 加入

人工智能微客(aiweker)长期跟踪和分享人工智能前沿技术、应用、领域知识,不定期的发布相关产品和应用,欢迎关注和转发

评论

发布
暂无评论
c语言基础回顾-指针 | AI工程化部署_c_AIWeker_InfoQ写作社区