传递指针给函数的用法

news/2025/2/27 6:35:26

在 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.niftyadmin.cn/n/5869665.html

相关文章

归纳总结一下Tensorflow、PaddlePaddle、Pytorch构建神经网络基本流程,以及使用NCNN推理的流程

使用Tensorflow构建神经网络&#xff0c;这里使用keras API&#xff0c;采用Sequential方式快速构建 import tensorflow as tf from tensorflow.keras.datasets import mnist from tensorflow.keras.utils import to_categorical# 加载数据集 (train_images, train_labels), (t…

9、什么是野指针?如何避免?【中高频】

&#xff08;1&#xff09;什么是野指针 野指针是 一种未被初始化的指针&#xff0c;通常会指向一个随机的内存地址。这个地址不可预测的&#xff0c;所以可能会导致 程序和数据出现错误 &#xff08;2&#xff09;在什么情况下会产生野指针&#xff1f; 初始化指针时&#xf…

【K8S】Kubernetes 基本架构、节点类型及运行流程详解(附架构图及流程图)

Kubernetes 架构 k8s 集群 多个 master node 多个 work nodeMaster 节点&#xff08;主节点&#xff09;&#xff1a;负责集群的管理任务&#xff0c;包括调度容器、维护集群状态、监控集群、管理服务发现等。Worker 节点&#xff08;工作节点&#xff09;&#xff1a;实际运…

使用ZFile打造属于自己的私有云系统结合内网穿透实现安全远程访问

文章目录 前言1.关于ZFile2.本地部署ZFile3.ZFile本地访问测试4.ZFile的配置5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定ZFile公网地址 前言 在数字化的今天&#xff0c;我们每个人都是信息的小能手。无论是职场高手、摄影达人还是学习狂人&#xff0c;每天都在创造…

Google sheet 复制excel内容自动合并单元格问题

解决路径&#xff1a;file-import-upload 这样上传本地的excel源文件&#xff0c;就没有这个问题了

自动化测试企业微信推送:群机器人(三)

前言&#xff1a;此文章主要讲解python通过群机器人发送文件 前置条件&#xff1a;群机器人已创建 代码逻辑&#xff1a; 1、通过企业微信的API文档&#xff0c;获取文件上传的media_id 2、获取到ID之后&#xff0c;发送群消息 代码&#xff1a; import os import time i…

《深度剖析:生成对抗网络中生成器与判别器的高效协作之道》

在人工智能的前沿领域&#xff0c;生成对抗网络&#xff08;GAN&#xff09;以其独特的对抗学习机制&#xff0c;为数据生成和处理带来了革命性的变革。生成器与判别器作为GAN的核心组件&#xff0c;它们之间的协作效率直接决定了GAN在图像生成、数据增强、风格迁移等众多应用中…

智绘教:Windows平台上的高效悬浮窗画笔工具深度解析

在Windows平台上,一款高效、实用的悬浮窗画笔工具对于提升工作效率和演示效果至关重要。今天,我要为大家介绍一款备受好评的悬浮窗画笔程序——智绘教。这款软件以其丰富的功能和便捷的操作,成为了众多用户心中的首选。接下来,让我们一起深入了解智绘教的各项特性。 一、体…