当前位置: 首页 > news >正文

传递指针给函数的用法

在 C 语言中,将指针传递给函数是一种常见且重要的编程技巧,它可以让函数直接操作调用者提供的内存区域,实现数据的修改、避免数据的复制开销等。下面为你提供几个不同场景下传递指针给函数的例子。

1. 修改调用者的变量值

通过传递变量的指针给函数,函数可以直接修改该变量的值。

收起

c

#include <stdio.h>

// 定义一个函数,接收一个整型指针作为参数,用于将该指针指向的值加 1
void increment(int *num) {
    (*num)++;
}

int main() {
    int number = 10;
    printf("递增前的数值: %d\n", number);

    // 传递 number 的地址给 increment 函数
    increment(&number);

    printf("递增后的数值: %d\n", number);
    return 0;
}

代码解释

  • increment 函数接收一个 int 类型的指针 num,通过 (*num)++ 操作对指针所指向的变量的值进行加 1 操作。
  • 在 main 函数中,定义了一个整型变量 number 并初始化为 10,然后将 number 的地址 &number 传递给 increment 函数。
  • 函数调用结束后,number 的值在 main 函数中已经被修改为 11。

2. 交换两个变量的值

通过传递两个变量的指针给函数,可以实现两个变量值的交换。

收起

c

#include <stdio.h>

// 定义一个函数,接收两个整型指针作为参数,用于交换它们指向的值
void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int x = 5;
    int y = 10;
    printf("交换前: x = %d, y = %d\n", x, y);

    // 传递 x 和 y 的地址给 swap 函数
    swap(&x, &y);

    printf("交换后: x = %d, y = %d\n", x, y);
    return 0;
}

代码解释

  • swap 函数接收两个 int 类型的指针 a 和 b,通过一个临时变量 temp 来交换 a 和 b 所指向的变量的值。
  • 在 main 函数中,定义了两个整型变量 x 和 y,并将它们的地址传递给 swap 函数。
  • 函数调用结束后,x 和 y 的值在 main 函数中已经完成交换。

3. 操作数组

传递数组名(本质是数组首元素的地址)给函数,函数可以对数组进行操作。

收起

c

#include <stdio.h>

// 定义一个函数,接收一个整型数组和数组的大小作为参数,用于打印数组元素
void printArray(int *arr, int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

// 定义一个函数,接收一个整型数组和数组的大小作为参数,用于将数组元素都乘以 2
void multiplyByTwo(int *arr, int size) {
    for (int i = 0; i < size; i++) {
        arr[i] *= 2;
    }
}

int main() {
    int array[] = {1, 2, 3, 4, 5};
    int size = sizeof(array) / sizeof(array[0]);

    printf("原始数组: ");
    printArray(array, size);

    // 传递数组名(即数组首元素地址)给 multiplyByTwo 函数
    multiplyByTwo(array, size);

    printf("乘以 2 后的数组: ");
    printArray(array, size);

    return 0;
}

代码解释

  • printArray 函数接收一个 int 类型的指针 arr 和数组的大小 size,通过循环遍历数组并打印每个元素。
  • multiplyByTwo 函数接收同样的参数,通过循环将数组中的每个元素都乘以 2。
  • 在 main 函数中,定义了一个整型数组 array,并将其首元素地址传递给 printArray 和 multiplyByTwo 函数。
  • 函数调用结束后,数组 array 的元素在 main 函数中已经被修改
http://www.dtcms.com/a/39144.html

相关文章:

  • 记录一下在k3s快速创建gitlab
  • 【江科协-STM32】5. 输出比较
  • Deepseek 开源周第一天:FlashMLA
  • 【C++】unordered系列容器的模拟实现
  • 结构型模式---外观模式
  • Vscode编辑器:解读文件结构、插件的导入导出、常用快捷键配置技巧及其常见问题的解决方案
  • 冒泡排序(Bubble Sort)详细教程:Java实现与优化
  • 25中医研究生复试面试问题汇总 中医专业知识问题很全! 中医试全流程攻略 中医考研复试调剂真题汇总
  • 苹果CMS泛目录站群架构:无缓存刷新技术的SEO实战
  • FST离群值分析
  • sql时间函数
  • 深度学习笔记数学方面——矩阵计算,自动求导
  • 脚本无法获取响应主体(原因:CORS Missing Allow Credentials)
  • 【AGI】DeepSeek开源周:The whale is making waves!
  • Kibana:Spotify Wrapped 第二部分:深入挖掘数据
  • 软件测试八股文,软件测试常见面试合集【附答案】
  • OpenCV计算摄影学(5)处理一系列图像(例如视频帧)的非局部均值去噪的函数fastNlMeansDenoisingColoredMulti()的使用
  • 接触式电子体温计方案研发pcba设计
  • 大白话JavaScript闭包在实际项目中有哪些应用场景?
  • Unity XR-XR Interaction Toolkit开发使用方法(十)组件介绍(XR Interaction Group)
  • 减速机的工作原理具体是如何实现的?
  • 手机放兜里,支付宝“碰一下”被盗刷?
  • ALM研发管理:全新甘特图,让项目管理更高效
  • 信号系统篇---欧拉公式角度表示方法
  • 期权帮|股指期货基差和价差有什么区别?
  • HC32F460_SCI驱动(一)
  • Ubutu部署WordPress
  • 数据中心设备故障难预测?智能预警系统为您排忧解难!
  • C++ Qt常见面试题(2):QT中的文件流(QTextStream)和数据流(QDataStream)的区别
  • EB-Cable许可分析的定义和目的