zoukankan      html  css  js  c++  java
  • C++ 函数形参发生动态绑定时指针增长步长与静态类型一致

    牛客网上的题:

    class A {
    public:
        long a;
    };
    class B : public A {
    public:
        long b;
    };
    void seta1(A* data, int idx) {
        data[idx].a = 2;
    }
    
    void seta2(A* data, int idx) {
        data[idx].a = 2;
    }
    
    int main()
    {
        B data[4];
        for (int i = 0; i<4; ++i) {
            data[i].a = 1;
            data[i].b = 1;
            seta1(data, i);         //输出22221111
            //seta2(data, i);    //输出21212121
        }
        for (int i = 0; i<4; ++i) {
            std::cout << data[i].a << data[i].b;
        }
        return 0;
    }

    这个题中,A的大小为4,B的大小为8,seta1的形参是A类型指针,seta2的形参是B类型指针

    所以seta1内部的步长增长是4,seta2内部的步长增长是8,当seta1和seta2的实参是B类型时在赋值时发生:

    所以:

    seta1的输出是22221111

    seta2的输出是21212121

  • 相关阅读:
    rh
    re模块
    粘包现象
    子类调用父类方法
    北大医院条码
    戴德金-连续性和无理数-第1页
    数学名词
    核心英语笔记,含记忆术mnemonics
    python笔记
    收集的句子
  • 原文地址:https://www.cnblogs.com/Chilly2015/p/5735986.html
Copyright © 2011-2022 走看看