一级指针和二级指针作为函数参数的区别

news/2025/10/15 22:20:44/文章来源:https://www.cnblogs.com/happykino/p/19144393

在函数参数中,一级指针(int*)和二级指针(int**)的核心区别在于能修改的数据层级:一级指针可修改指针指向的变量值,而二级指针可修改一级指针本身(包括其指向或分配的内存)

一级指针作为函数参数

作用:通过一级指针,函数可以修改指针所指向的变量的值,但无法修改指针自身的指向或为其分配新内存(因为函数接收的是指针的副本)。


示例 1:用一级指针修改外部变量的值

#include <iostream>
using namespace std;// 一级指针作为参数:修改指针指向的变量值
void modifyValue(int* p) 
{*p = 100;  // 正确:修改p指向的变量(外部的x)
}int main() 
{int x = 10;int* ptr = &x;cout << "修改前:x = " << x << endl;  // 输出:10modifyValue(ptr);                     // 传入一级指针cout << "修改后:x = " << x << endl;  // 输出:100(x被修改)return 0;
}

示例 2:一级指针无法修改自身指向
#include <iostream>
using namespace std;// 尝试通过一级指针修改指针的指向(失败)
void changePointer(int* p) 
{int y = 20;p = &y;  // 仅修改函数内的副本,外部ptr不受影响
}int main() 
{int x = 10;int* ptr = &x;cout << "修改前:*ptr = " << *ptr << endl;  // 输出:10changePointer(ptr);cout << "修改后:*ptr = " << *ptr << endl;  // 仍输出:10(ptr指向未变)return 0;
}

原因:函数接收的是ptr的副本,修改副本的指向不会影响外部原始指针。

二、二级指针作为函数参数

作用:通过二级指针,函数可以修改一级指针本身(包括其指向、分配的内存等),因为二级指针存储了一级指针的地址。


示例 3:用二级指针修改一级指针的指向

#include <iostream>
using namespace std;// 二级指针作为参数:修改一级指针的指向
void changePointer(int** pp) 
{int y = 20;*pp = &y;  // 通过二级指针修改一级指针(ptr)的指向
}int main() 
{int x = 10;int* ptr = &x;cout << "修改前:*ptr = " << *ptr << endl;  // 输出:10changePointer(&ptr);                        // 传入一级指针的地址(二级指针)cout << "修改后:*ptr = " << *ptr << endl;  // 输出:20(ptr指向已改为y)return 0;
}

示例 4:用二级指针为一级指针动态分配内存
#include <iostream>
using namespace std;// 二级指针作为参数:为外部一级指针分配内存
void allocMemory(int** pp, int size) 
{*pp = new int[size];  // 为外部指针分配内存for (int i = 0; i < size; i++) {(*pp)[i] = i;     // 初始化数组}
}int main() 
{int* arr = nullptr;   // 未分配内存的一级指针allocMemory(&arr, 5); // 传入arr的地址(二级指针)// 验证内存分配结果cout << "数组元素:";for (int i = 0; i < 5; i++) {cout << arr[i] << " ";  // 输出:0 1 2 3 4}delete[] arr;  // 释放内存return 0;
}

三、核心区别总结

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/937843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ROUGE指标

2025.10.15 1.ROUGE指标是评估文本生成质量的常用指标,通过计算生成文本与参考文本之间的n-gram重叠度来测量内容相似性和召回率

CSP-S 模拟 29

CSP-S 模拟 29 A. 一个赢家 (card) 有 \(2n\) 张卡,第 \(i\) 张卡上写着数字 \(i\)。有 \(n\) 个人,这 \(n\) 个人轮流从这些卡中均匀随机拿走两张,不放回。现在每个人手上各有两张卡,手上两张卡上写的数字的和最大…

实用指南:【编号508】(道路分类)湖南路网数据湖南路网分类数据(2025年)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Linux 文件及相关安全操作指南

Linux 文件及相关安全操作指南 Linux根目录项一行说明 一、Linux 根目录各文件夹一行说明(基础回顾)根目录文件夹 一行核心用途bin 系统启动与普通用户可用的基础可执行程序(如ls、cp)boot 启动相关文件(内核vmli…

day012

今日完成:学习了mysql的数据库编辑,添加. 明日完成:数据库 遇到问题:无

怎么能把一个横着的很长的excel表,输出成一个能完整展示在一个页面中的PDF

参考链接:https://blog.csdn.net/qq_34972627/article/details/128139320 横向的Excel输出为pdf自动分成两页怎么办?不分页,铺满整张纸的方法来了

深入解析:Leetcode+Java+图论+岛屿问题

深入解析:Leetcode+Java+图论+岛屿问题pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…

简单介绍

简单介绍AI Agent 即人工智能体,通常是指有能力主动思考和行动的智能体,能够以类似人类的方式工作,通过大模型来 “理解” 用户需求,主动 “规划” 以达成目标,使用各种 “工具” 来完成任务,并最终 “行动” 执…

agent认知与原理分析

agent认知与原理分析1

agent策略分析与Parer解读

agent策略分析与Parer解读1

夸克网盘免费扩容,新用户轻松领取1TB免费空间!一步一步教你如何操作! - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Visual Studio 2022连接mysql数据库,解决System.Data.Odbc.OdbcException (0x80131937)

首先我们要下载MySQL ODBC驱动,下载地址: https://downloads.mysql.com/archives/c-odbc/ 下载Windows (x86, 64-bit), MSI Installer 了解ODBC:接下来要连接mysql数据库了,参考这位前辈的笔记:https://blog.csdn…

[AI生成]Spark-TTS个人理解

Spark-TTS 是一个在设计思路上非常清晰、工程结构合理、适合个人开发者学习和二次开发的优秀开源 TTS 项目。以下是它值得肯定的几个关键点,也解释了为什么它特别适合学习:✅ 为什么 Spark-TTS 适合个人开发者学习?…

2025.10.3 测试

DP+线段树/容斥+DP/贪心+构造/Ad-hocA. 思考如何匹配子序列,肯定是贪心的能扩展就扩展,将这个过程改写成 DP 。 设 \(f[i, j]\) 表示 \(S\) 匹配了 \(i\) 位,\(T\) 匹配了 \(j\) 位的方案数。 枚举下一位匹配位置得…

[20251015]建立和完善col_vlist.sql脚本.txt

[20251015]建立和完善col_vlist.sql脚本.txt--//建立一个支持视图的版本,由于oracle没有视图提取字段信息的视图,只能通过desc提取,通过bash shell处理生成需要的脚本。--//如果有哪个视图支持提取视图字段信息的,…

[20251014]建立和完善col_list.sql脚本.txt

[20251014]建立和完善col_list.sql脚本.txt--//增加选择字段顺序号功能。$ cat col_list.sql-- Copyright 2023 lfree. All rights reserved.-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for…

[20251014]建立完善通用的prx.sql脚本.txt

[20251014]建立完善通用的prx.sql脚本.txt--//前几天更改了tpt的prr.sql,想实现一个更加通用pr.sql的版本。自己做一些尝试:--//参数1支持2种格式,第1种格式使用数字序列使用,分开,输出对应字段。第2种格式使用正则…

倍增法

引入 对于任意的整数n,都可以将他拆分为有限个二次幂的和(即二进制拆分)。 那么我们就可以将规模为n的大问题拆分为许多区间长度为二的幂次的小问题。 这样,如何快速解决区间长度为二的幂次的问题就是我们想关心的…

复杂版式与印章干扰下的高精度社会团体法人登记证书识别技术

在社会治理和公共服务日益数字化的今天,社会团体法人登记证书作为社会组织的“身份证”,其信息处理的效率与准确性至关重要。传统的人工录入方式耗时耗力、易出错,已成为制约政务效率和金融服务体验的瓶颈。因此,基…