zoukankan      html  css  js  c++  java
  • 笔试

    笔试


    这道题应该注意 指针类型加减 时步长的问题。
    A 大小为 4
    B 大小为 8
    那么:
    void seta(A* data, int idx) {
        data[idx].a = 2;
    }
    由于传入的实参为B类型,大小为8,而形参为A类型,大小为4
    data[idx] 取 data + idx 处的元素,这时指针 data加1 的长度不是一个B长度,而是一个A长度,或者说是1/2个B长度。这时该函数中 data[0~3] 指向的是原 data[0].a,data[0].b,data[1].a,data[1].b,
    由于隐式类型转换的缘故,data[0].a,data[0].b,data[1].a,data[1].b 处的值全部由于 data[idx].a = 2; 操作变为 2。
    这道题如果改为void seta(B* data, int idx),那么形参中data指针加1步长为8,结果就是21212121。但是由于步长为4,所以结果就是 22221111。





  • 相关阅读:
    【JS】DOM
    【JS】事件处理
    【JS】引用类型之Global
    【JS】引用类型之RegExp
    【JS】引用类型之Function
    树形图(菜单)构建组建dhtmlXTree
    【JS】引用类型之String
    【JS】引用类型之Math
    【JS】鼠标事件
    【JS】UI事件
  • 原文地址:https://www.cnblogs.com/ZhangJinkun/p/4531294.html
Copyright © 2011-2022 走看看