C 语言指针 “实战终章”:综合案例拆解,融会贯通指针编程之道(六)

news/2025/1/8 15:16:20/

文章目录

  • C语言指针 “实战终章”:综合案例拆解,融会贯通指针编程之道
    • 引言
    • 案例一:数组元素交换
      • 代码示例
      • 代码分析
    • 案例二:数组指针传递
      • 代码示例
      • 代码分析
    • 案例三:二维数组指针
      • 代码示例
      • 代码分析
    • 案例四:指针数组
      • 代码示例
      • 代码分析
    • 总结

C语言指针 “实战终章”:综合案例拆解,融会贯通指针编程之道

引言

指针作为C语言的核心概念之一,在各类编程场景中都发挥着至关重要的作用。从数组操作到函数调用,指针为我们提供了灵活且高效的编程方式。本博客将通过一系列经典案例,深入剖析指针在数组和指针编程中的关键应用,帮助读者全面掌握指针编程技巧。

案例一:数组元素交换

代码示例

#include <stdio.h>void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;
}int main() {int arr[] = {10, 20, 30};printf("交换前数组元素: ");for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){printf("%d ", arr[i]);}swap(&arr[0], &arr[1]);printf("\n交换后数组元素: ");for  (int i = 0; i < sizeof arr) / sizeof(arr[0]); i++) {printf("%d ", arr[i]);}return 0;
}

代码分析

  • 函数swap:它接受两个指针ab,通过解引用*a*b获取指针所指向的值,然后交换它们的值。
  • 主函数main:定义了一个数组arr,并调用swap函数来交换数组元素。这里&arr[0]&arr[1]分别是数组第一个元素和第二个元素的地址。

案例二:数组指针传递

代码示例

#include <stdio.h>void printArray(int *arr, int size) 
{for (int i = 0; i < size; i++) {printf("%d ", arr[i]);}printf("\n");
}int main() 
{int arr[] = {10, 20, 30};printArray(arr, sizeof(arr) / sizeof(arr[0]));return 0;
}

代码分析

  • 函数printArray:接受一个指针arr和一个整数sizearr指向数组首元素,通过arr[i]访问数组元素。
  • 主函数main:将数组arr传递给printArray函数,这里arr实际上是数组首元素的地址。

案例三:二维数组指针

代码示例

#include <stdio.h>void printMatrix(int (*matrix)[3], int rows) 
{for  (int i = 0; i < rows; i++) {for (int j = 0; j < 3; j++) {printf("%d ", matrix[i][j]);}printf("\n");}
}int main() {int matrix[][3] = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};printMatrix(matrix, 3);return 0;
}

代码分析

  • 函数printMatrixint (*matrix)[3]表示一个指向二维数组的指针,matrix是二维数组名。matrix[i][j]用于访问二维数组的元素。
  • 主函数main:将二维数组matrix传递给printMatrix函数,这里matrix是二维数组首元素的地址。

案例四:指针数组

代码示例

#include <stdio.h>int main() 
{int num1 = 10;int num2 = 20;int *arr[] = {&num1, &num2};for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {printf("%d\n", *arr[i]);}return 0;
}

代码分析

  • 数组arrarr是一个指针数组,arr[0]arr[1]分别指向num1num2
  • 循环:通过*arr[i]解引用指针,获取指针所指向的值并打印。

总结

通过以上案例,我们深入探讨了指针在数组和指针编程中的各种应用。无论是数组元素交换、数组指针传递,还是二维数组指针和指针数组的操作,指针都发挥着关键作用。在实际编程中,理解指针的概念和应用,能够帮助我们编写更高效、灵活的代码。希望读者通过这些案例,能够融会贯通指针编程之道,在今后的编程实践中取得更好的成果。


http://www.ppmy.cn/news/1561578.html

相关文章

HTML语言的数据结构

以HTML语言的数据结构为名 在当今信息化的时代&#xff0c;网页已成为人们获取信息和交流的重要方式。HTML&#xff08;超文本标记语言&#xff09;作为构建网页的基础语言&#xff0c;其数据结构和组成方式使得信息的呈现和交互变得直观而高效。本文将深入探讨HTML语言的数据…

大模型测试-数飞机个数

时间是2025年1月7日&#xff0c;测试下各大网页端大模型的多模态识图能力。 测试题目 图片 问题 标记一下图里的飞机&#xff0c;并数一下飞机的个数 测试结果 千问qwen 在这张图片中&#xff0c;我可以看到总共12架飞机。以下是它们的位置标记&#xff1a;左上角跑道上有…

『SQLite』几种向表中插入数据的方法

向表中插入数据 INSERT INTO 语句用来给数据库中的某个表中新增数据行。 案例 直接根据基本语法插入数据插入时不用全部指定列名方式根据查询结果将数据插入另一张表中 注意 上述内容详讲见文章&#xff1a;SQLite的INSERT操作&#xff08;内含案例&#xff09;

Leffa 虚拟试衣论文笔记

Leffa: Learning Flow Fields in Attention for Controllable Person Image Generation https://github.com/xuanandsix/awesome-virtual-try-on-note/tree/main/Leffa 打开链接查看详情&#xff0c;更多虚拟试穿论文持续更新。

《Vue3实战教程》35:Vue3测试

如果您有疑问&#xff0c;请观看视频教程《Vue3实战教程》 测试​ 为什么需要测试​ 自动化测试能够预防无意引入的 bug&#xff0c;并鼓励开发者将应用分解为可测试、可维护的函数、模块、类和组件。这能够帮助你和你的团队更快速、自信地构建复杂的 Vue 应用。与任何应用一…

vue中 输入框输入回车后触发搜索(搜索按钮触发页面刷新问题)

一、回车触发搜索 代码 <el-inputkeyup.enter.native"keyDownEnter"size"medium"v-model"orgNameInput"placeholder"请输入"style"width:200px"clearable></el-input><el-button type"primary" …

linux 查找redis 的配置文件 (`redis.conf`)

要查找 Redis 的配置文件 (redis.conf)&#xff0c;可以使用以下方法&#xff1a; ✅ 方法 1&#xff1a;使用 locate 或 find 命令 ➡️ 1. 使用 find 命令 在 WSL 或 Linux 中运行以下命令来查找配置文件&#xff1a; sudo find / -name redis.conf➡️ 2. 使用 locate 命…

SEO内容优化:如何通过用户需求赢得搜索引擎青睐?

在谷歌SEO优化中&#xff0c;内容一直是最重要的因素之一。但要想让内容真正发挥作用&#xff0c;关键在于满足用户需求&#xff0c;而不是简单地堆砌关键词。谷歌的算法越来越智能化&#xff0c;更注重用户体验和内容的实用性。 了解目标用户的需求。通过工具如Google Trends…