当前位置: 首页 > 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 函数中已经被修改

相关文章:

  • 记录一下在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)
  • 正荣地产:董事会主席、行政总裁辞任,拟投入更多精力推动境内债重组等工作
  • 硅料巨亏后弘元绿能割肉求生:逾12亿元内蒙古公司股权转让协鑫
  • 陕西澄城樱桃在上海推介,向长三角消费者发出“甜蜜之邀”
  • 绍兴柯桥:用一块布托起中国制造的新经纬
  • 是否有中国公民受印巴冲突影响?外交部:建议中国公民避免前往冲突涉及地点
  • 多地政府机关食堂迎来大客流,重庆荣昌区委书记给厨师们鼓劲