首页 > 编程语言 >C++ 指针形参与引用参数

C++ 指针形参与引用参数

时间:2023-06-26 21:22:35浏览次数:50  
标签:std int value 修改 引用 指针 C++

指针形参与引用参数

指针形参

指针作形参时,若在函数中修改指针对象的值,则对应实参的值会对应修改。

#include <iostream>
using namespace std;

void Change( int *p){
    *p=400;
};

int main(int argc, char const *argv[])
{
    int value = 1;
    int *argsPiont = &value;
    Change(&value);
    std::cout << "number4="<< value  <<endl;
    //console:value=400    
    std:cout<< "*argsPiont=" << *argsPiont << "\targsPiont=" << argsPiont << endl;
    //console: *p1=400 p1=0x5ffe54
    return 0;
}

若在函数体中仅修改指针的指向,则不会改变实参的值。

#include <iostream>
using namespace std;

void NoneChange(int *p)
{
    int value = 300;
    p = &value;
    *p = 400;
};

int main(int argc, char const *argv[])
{
    int value = 1;
    int *argsPiont = &value;
   
    std::cout << "value=" << value << endl;
    // console:value=1
    std::cout<< "*argsPiont=" << *argsPiont << "\targsPiont=" << argsPiont << endl;
    // console: *argsPiont=400 argsPiont=0x5ffe54
    std::cout << "=============" << endl;
    NoneChange(argsPiont);
    std::cout << "value=" << value  << endl;
    // console:value=1
    std::cout<< "*argsPiont=" << *argsPiont << "\targsPiont=" << argsPiont << endl;
    // console: *argsPiont=1 argsPiont=0x5ffe54
    return 0;
}

另外的,指针常量和常量指针也可以作为指针形参。只是二者根据需要限定了指针的指向不能修改或者是指针指向的对象不能修改。

指针的指向不能修改,但是指向的值可以修改等同于引用形参

引用参数

void Change(int &p)
{
    p = 400;
    //会修改实参的值。   

};
int main(int argc, char const *argv[])
{
    int value = 1;
    int *argsPiont = &value;
     Change(value);
    std::cout << "value=" << value << endl;
    // console:argsPiont=400
    std::cout<< "*argsPiont=" << *argsPiont << "\targsPiont=" << argsPiont << endl;
    // console: *argsPiont=400 argsPiont=0x5ffe54
}

引用参数会修改实参,若不能修改实参的值则可以用 const修订引用参数。

指向指针的引用

void Change(int *&p)
{
    int changeValue = 400;
    p = &changeValue;
    std::cout << "&changeValue=" << &changeValue << "\tchangeValue=" << changeValue << endl;
    //consle:&changeValue=0x5ffe1c   changeValue=400
};
int main(int argc, char const *argv[])
{
    int value = 1;
    int *argsPiont = &value;
    std::cout << "value=" << value << "\t&value=" << &value << endl;
    //console:value=1 &value=0x5ffe5c
    Change(argsPiont);
    std::cout << "*argsPiont=" << *argsPiont << "\targsPiont=" << argsPiont << endl;
    // console: *argsPiont=0    argsPiont=0x5ffe1c
}

指向指针的引用可以修改形参指针的指向。

标签:std,int,value,修改,引用,指针,C++
From: https://www.cnblogs.com/pangzishuoma/p/17506743.html

相关文章

  • C++11特性简单介绍
    自动类型推导autoautox=10;//推导x为int类型autostr="Hello";//推导str为constchar*类型基于范围的For循环for(int&i:someDataStructure){doSomething();}for(inti:someDataStructure)doSomething();在上面的两个for循环中,第一个使用引用,第二个启用按......
  • 学习C++就这么简单 ——《写给大家看的C++书》
    C++已经有很多年的历史了,虽然在它之后又出现了Java和C#之类的新语言,但它至今仍是人们开发软件时的最佳选择之一。那些巨头中的巨头,如微软、Adobe、英特尔、亚马逊、Google、苹果、诺基亚等公司,都在使用C++。这门语言相对比较容易使用(选用本书作为入门教材就更是如此了......
  • C/C++航空客运订票系统[2023-06-26]
    C/C++航空客运订票系统[2023-06-26]实验1航空客运订票系统问题描述:航空客运订票的业务活动包括查询航线和客票预订的信息、客票预订和办理退票等,设计一个程序使上述任务借助计算机来完成。基本要求:(一)系统必须存储的数据信息。1.信息:飞机抵达的城市、航班号、飞机号、起降......
  • C++一读一写无锁队列
    //一读一写的无锁管道队列template<classT>classPipelineList{private:template<classT>structqnode{structqnode*next;Tdata;};structqnode<T>*volatilem_front;structqnode<T>*volatilem_......
  • c++ std::execution::par,std::execution::par_unseq
    #include<algorithm>#include<chrono>#include<cstdint>#include<execution>#include<iostream>#include<random>#include<vector>std::random_devicerd;std::mt19937_64mt{rd()};template<typenameT>......
  • 为什么 Keil 中C/C++选项要 define STM32F10X_LD/MD/HD
    原因1:配置相应的中断向量表 原因2:配置相应的寄存器  总结原因:因为所有的stm32f10x 系列的芯片都会用到stm32f10x.h 这个头文件,但是问题的所在是:每种芯片的配置不同(中断向量个数、寄存器个数等等)因此宏条件编译#if!defined 判断这个宏(这个宏就是STM32F10X_LD......
  • opencv 表识别 工业表智能识别 数字式表盘识别,指针式表盘刻度识别,分为表检测,表盘纠正,
    在工业表智能识别中,OpenCV被用于数字式表盘和指针式表盘的识别。这个过程可以分为几个步骤:表的检测、表盘的纠正、刻度的分割、刻度的拉直识别,以及指针和时刻的分割。首先,通过表的检测,确定表在图像中的位置。然后,对表盘进行纠正,将圆形表盘拉直成一条线,以便后续处理。接下来,进行刻度......
  • 文件位置指针
     istream 和 ostream 都提供了用于重新定位文件位置指针的成员函数。这些成员函数包括关于istream的 seekg("seekget")和关于ostream的 seekp("seekput")。seekg和seekp的参数通常是一个长整型。第二个参数可以用于指定查找方向。查找方向可以是 ios::beg(默认的,从流......
  • Linux搭建C++开发环境
    Linux搭建C++开发环境https://blog.csdn.net/weixin_44666217/article/details/127594532LinuxC/C++开发环境搭建https://blog.csdn.net/zcteo/article/details/117528089 ......
  • C/C++按位读取
    RinpoStk按位读取在C中无法直接按位读取,常见的方法是通过位运算获取每一位的数据。//获取B5第4位//(B5&(1<<5))>>5 10110101& 00010000;= 00010000//得到1采取共用体(联合)可以得到一个既可以按位读取,也可以按字节读取的数据类型union{struct{un......