精华内容
下载资源
问答
  • 指针解引用运算符 * 与 ++关系 1、*p++ int arry[5] = {10,20,30,40,50}; int *p = &arry[0]; printf("*p:%d\n",*p++); printf("*p:%d\n",*p); 结果: *p:10 *p:20 2、*++p int arry[5] = {10,20,30,40,50...

    指针解引用运算符 * 与 ++ 的关系

    1、*p++

    int arry[5] = {10,20,30,40,50};
        int *p = &arry[0];
    	printf("*p:%d\n",*p++);
    	printf("*p:%d\n",*p);
    

    结果:(但其实是先和++结合先,因为++的优先级高)

    *p:10
    *p:20
    

    2、*++p

    int arry[5] = {10,20,30,40,50};
        int *p = &arry[0];
    	printf("*p:%d\n",*++p);
    	printf("*p:%d\n",*p);
    

    结果:

    *p:20
    *p:20
    

    3、(*p)++

    int arry[5] = {10,20,30,40,50};
        int *p = &arry[0];
    	printf("*p:%d\n",(*p)++);
    	printf("*p:%d\n",*p);
    	printf("arry[0]:%d\n",arry[0]);
        return 0;
    

    结果:

    *p:10
    *p:11
    arry[0]:11
    
    展开全文
  • 引用运算符一般也应该声明为类的成员函数,但不是必须。2、箭头算符返回值必须是一个指针,或者是一个重载了箭头运算符的对象。a)如果返回的是一个指针将调用内置的箭头运算符。执行相当于(*(p.operator->())...

    重载要求:

    1、箭头运算符必须是类的成员函数。解引用运算符一般也应该声明为类的成员函数,但不是必须。

    2、箭头用算符返回值必须是一个指针,或者是一个重载了箭头运算符的对象。

    a)如果返回的是一个指针将调用内置的箭头运算符。执行相当于(*(p.operator->()).mem;的操作。

    b)如果返回是一个重载了箭头运算符的对象,则继续对该对象调用其重载了的箭头运算符,直到返回的是

    一个指针,将对该指针调用a)的操作。操作相当于(*(p.operator->().operator->())).mem;

    总的来说重载的箭头运算符就是为了改变从哪个对象中获取成员。

    下面是一个例子,尽管这个例子不是特别有用。

    #include 

    #include 

    using std::cin;

    using std::cout;

    using std::endl;

    class A{

    friend std::ostream& operator<

    public:

    int operator*(){return b;}

    A* operator->(){return this;}

    int geta(){return a;}

    int getb(){return b;}

    private:

    int a=0;

    int b=1;

    };

    std::ostream& operator<

    {

    os<

    return os;

    }

    int main()

    {

    A a;

    A *pa=&a;

    std::cout<

    std::cout<

    std::cout<geta()<getb()<<:endl>

    return 0;

    }

    展开全文
  • C++中容器迭代器解引用运算符

    千次阅读 2021-11-11 17:00:09
    在C++中,“*”表示解引用运算符。在《C++中容器迭代器的基本使用方法1》中提到,迭代器的ptr变量实际上就是一个指针,该指针指向了迭代器表示的元素。因此,在容器迭代器中使用引用运算符,与在指针上使用解...

    1 简介

    在C++中,用“*”表示解引用运算符。在《C++中容器迭代器的基本使用方法1》中提到,迭代器的ptr变量实际上就是一个指针,该指针指向了迭代器表示的元素。因此,在容器迭代器中使用解引用运算符,与在指针上使用解引用运算符类似,其的作用是返回该迭代器所指元素的引用。

    2 使用

    使用解引用运算符的代码如图1所示。

    图1 使用解引用运算符

    此时,*it_begin表示对迭代器it_begin进行解引用运算,其值是it_begin指向的元素,此时变量i的值是0。

    还可以通过解引用运算符改变容器中的元素值,如图2所示。

    图2 通过解引用运算符改变容器中的元素值

    图2中的代码,将向量v1的第一个值修改为10,如图3所示。

     

    图3 v1的内存数据

    从图3中可以看出,0x005A59C8(图3①)是向量v1的第一个元素的地址,此时其内存中的数据已经被修改为0x0000000a(图3②),即10。

    3 注意事项

    不能对非法的迭代器和尾后迭代器进行解引用操作。如图4所示。

     

    图4 对尾后迭代器进行解引用

    其中,it_end是向量v1的尾后迭代器,对于尾后迭代器的解释,请参考《C++中容器迭代器的基本使用方法1》。对尾后迭代器进行解引用操作后,将其值保存在变量i中。运行程序,此时会弹出如图5所示的错误信息。

    图5 错误信息

    从图5中可以看出错误信息是“不能够解引用操作范围的向量迭代器”。其主要原因是,从图3③中可以看出,it_end的ptr的值是0xfdfdfdfd,对it_end解引用,实际上就是要访问内存中的0xfdfdfdfd,该地址收到访问权限的限制,因此就会报错。

    展开全文
  • 时参数使用引用 在刚刚的c++课程上突然明白一件事情: 重载<<(输出流操作)的时候如果结合后++使用,注意要传入的类类型的参数为常引用,比如我们来看一个例子: #include<iostream> using namespace ...

    重载运算符<<时参数使用常引用

    在刚刚的c++课程上突然明白一件事情:
    重载<<(输出流操作)的时候如果结合后++使用,注意要传入的类类型的参数为常引用,比如我们来看一个例子:

    #include<iostream>
    using namespace std;
    class A
    {
    private:
        int a;
    public:
        A():a(0){}
        friend ostream& operator<<(ostream& ss,A& a1);
        const A operator++(int);
    };//一个简单的类
    const A A::operator++(int)
    {
        A index=*this;
        this->a++;
        return index;
    }//后++重载
    ostream& operator<<(ostream&ss,A&a1)
    {
        ss<<a1.a;
        return ss;
    }//<<重载
    
    int main()
    {
        A a1;
        cout<<a1++<<endl;
    }
    

    这是错误分析
    以上是编译器给出的错误分析

    相信大家都看出来至少有一处错误,因为++返回的是const,所以在<<重载中参数也应该是常引用,但是把后++重载的返回值改成非const(当然实现和声明处都更改)之后还是不对,提示的错误信息与上面也相同。

    所以我认为问题在cout上,对于基本数据类型

    int a,b;
    cout<<a+b;              
    这是合法的,这是c++已经帮我们处理好的,
    

    而我们自己定义的类类型

    A a1,a2;
    cout<<a1+a2;
    \\a1+a2是一个表达式 必须以常引用的方式作为<<的参数
    

    以下是正确的代码,可供大家学习

    #include<iostream>
    using namespace std;
    class A
    {
    private:
        int a;
    public:
        A():a(0){}
        friend ostream& operator<<(ostream& ss,const A& a1);
        A operator++(int);
    };
    A A::operator++(int)
    {
        A index=*this;
        this->a++;
        return index;
    }
    ostream& operator<<(ostream&ss,const A&a1)
    {
        ss<<a1.a;
        return ss;
    }
    
    int main()
    {
        A a1;
        cout<<a1++<<endl;
    }
    

    如果有不对的地方,欢迎指出,也欢迎补充。

    主要是运算符重载平时写的比较少,用的地方也比较少,这也让我明白实践出真知,学习过程中应该多多写代码,这次以博客的形式记录我的学习过程。

    展开全文
  • C语言中,优先级规定了当多个运算符同时存在时表达式的求值顺序;结合性指出当多个优先级相同的运算符存在时表达式的求值顺序,可以消除歧义,优先级相同的运算符它们的结合性也一致。例如:1、优先级示例num_1 = ...
  • 我们先来看一看自增运算符重载的例子: #include<iostream> using namespace std; class Test { private: int m_a; public: Test() { m_a = 0; } //运算符重载返回对象的类型 Test& operator++...
  • 作为取地址运算符时,假设 char ch = 'a'; 那么&ch是一个右值,而不是一个合法的左值。因为该表达式并未标识任何机器内存的特定位置,对&ch进行求值时,其结果没有地方存储,所以&ch不是一个合法的...
  • Arduino运算符

    2021-09-06 20:44:11
    Arduino运算符 官方文档:https://www.arduino.cc/reference/en/ 1.比较运算符 2.算术运算符 3.指针操作符 4.位运算符 5.逻辑操作符 6.复合运算符
  • 引用什么情况都可以使用了绝对不错,但是值传递却不行,总的来说引用使用范围最大,建议使用引用。 Q3:那什么时候使用引用,什么时候简单的值传递返回就行 R3:这个取决于我们的运算符使用场景。根据总结...
  • 使用指向运算符引用结构体对象成员 #include <stdio.h> #include <string.h> struct Student { char cName[20]; int iNumber; char cSex; int iGrade; }student; //定义变量 int main() { struct ...
  • C语言运算符

    2021-05-19 17:06:07
    原标题:C语言运算符运算符在应用程序中,经常会对数据进行运算,为此,C语言提供了多种类型的运算符,即专门用于告诉程序执行特定运算或逻辑操作的符号。根据运算符的作用,可以将 C语言中常见的运算符分为下图中的...
  • 1 引用 引用初始化必须是左值,只能是++a,不能是a++ void fun(int& a){}; //此过程相当于int& a = b; int main(){ int b; fun(b);} int main() { int a = 1; int& b = ++a; // b是a的引用, a=2,...
  • 用来引用结构、联合和类的成员。成员访问表达式具有选定成员的值和类型。有两种形式的成员访问表达式:在第一种形式中,postfix-expression 表示结构、类或联合类型的值,name 为指定的结构、联合或类的成员...
  • c++ primer P492:赋值运算符的行为与复合版本(什么是复合版本)的类似,左侧运算对象和右侧运算对象的值相等,并且运算符应该返回它左侧运算对象的一个引用。 疑问:为什么要返回左侧运算对象的引用,返回它的拷贝...
  • 在一些资料和书籍中,都告诉我们如果要实现自定义类的连续赋值重载,那么就需要将赋值重载的返回值定义为引用。 但直接返回实例依然可以实现连续赋值的功能
  • 运算符一共有4种类型:算术、比较、文本连接和引用。★算术运算符若要进行基本的数学运算(如加法、减法、乘法或除法)、合并数字以及生成数值结果,请使用以下算术运算符。●+(加号):加法,示例:3+3●-(减号或负数)...
  • C++的运算符十分丰富,使得C++的运算十分灵活方便。例如把赋值号(=)也作为运算符处理,这样,a=b=c=4就是合法的表达式,这是与其他语言不同的。C++提供了以下运算符:算术运算符+(加) -(减) *(乘) /(除) %(整除求余)...
  • 首先,我们要理解,引用(&)是什么意思? &在c语言中可以是取地址的意思。 但在C++中,它有另外一种用法,即引用,这是在C++中特有的,对引用最通俗简单的理解就是取别名!我们做个简单尝试,看以下代码。 ...
  • 间接寻址运算符:*

    2021-05-24 02:07:13
    间接寻址运算符:*03/01/2013本文内容* cast-expression备注一元间接寻址运算符 (*) 取消引用指针;即它将指针值转换为左值。间接寻址运算符的操作数必须是指向类型。间接表达式的结果是指针类型派生的类型。使用 * ...
  • 创建一个对象使用new运算符。new创建的对象实例在堆内存中,而对象引用指向对象实例,对象引用存放在栈内存中。 一个对象引用可以指向0个或1个对象实体,而一个对象可以有多个引用来指向它。 ...
  • 逻辑运算符使用分析&&和||1、程序中的短路短路规则||从左向右开始计算当遇到为真的条件时停止计算整个表达式为真所有条件为假时表达式才为假。&&从左向右开始计算当遇到为假的条件时停止计算整个...
  • 原因在于,每一次调用=运算符,都会生成一个具有表达式作用域的临时对象,这个临时对象的生成需要调用拷贝构造函数,到达作用域的终点时又需要调用析构函数来释放内存空间。 反观class B,只执行了必要的操作,没有...
  • 运算符运算符是可以通过给出的一或多个值(编程行话来说,表达式)来产生另一个值(因而整个结构成为一个表达式)的东西。运算符可按照其能接受几个值来分组。一元运算符只能接受一个值,例如!(逻辑取反运算符)或++...
  • 单目运算符 双目运算符 三目运算符

    千次阅读 2021-05-23 07:29:42
    单目就是这个运算符只对一个变量进行操作代表符号:!(逻辑非) ~(按位取反)++(自增)--(自减)举例:int a=1;a++;(第二句“a++”则只对a一个变量进行了操作)2。双目就是这个运算符对两个变量进行操作举例:int a=1,b=2,...
  • C++的流插入运算符“<>”是C++在类库中提供的,所有C++编译系统都在类库中提供输入流类istream和输出流类ostream。cin和cout分别是istream类和ostream类...因此,凡是“cout<>”对标准类型数据进行输...
  • 数学运算符用于表示数学和算数操作符,那么如何在HTML中引用数学运算符?下面本篇文章就来给大家介绍一下,希望对大家有所帮助。在 HTML 中,数学运算符是预留的。如果希望正确地显示预留字符,我们必须在 HTML 源...
  • Java运算符

    2021-02-28 10:16:10
    Java运算符计算机的最基本用途之一就是执行...1. 算数运算符算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。操作符名称描述+加法相加运算符两侧的值–减法左操作数减去右操作数*乘法相乘操作符两侧...
  • 算术运算符用在数学表达式中,主要实现的是算术运算,如常见的加减乘除等。 表格中的例子中,变量a的值为 5,变量b的值为 3,变量i的值为 1: 其中,自增 (++) 和自减 (--) 运算符有两种写法...
  • 小结: bool类型是C++增加的一个新的基础类型 bool类型的值只能是 false 或者 true C++的三目运算符可以作为左值 C++的yiny可以看做变量的别名来使用 三目运算符的可能都是变量时,返回的是引用 原文地址:...
  • C语言指针变量的使用需要以下两个运算符: &:取地址运算符,它返回运算对象的内存地址。 * :指针运算符,也称为“间接引用操作符”,它返回指针指的变量的值。 1.取地址运算符 & & 是一元运算符,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 302,345
精华内容 120,938
关键字:

引用运算符怎么用