代码之家  ›  专栏  ›  技术社区  ›  Era

这段c/obj-c代码让我困惑

  •  0
  • Era  · 技术社区  · 14 年前

    我有一个简单的方法来移动数组中的元素。

    void queuePut(uint32_t val, uint32_t *q, int qlen) {
        for (int i=qlen; i>0; i--) {
            q[i] = q[i-1];
        }
        q[0] = val;
    }
    

    在我的类标题中,我定义了一个结构

    @interface MyClass : NSObject {
        struct {
            uint32_t cookie[10];
            uint32_t value[10];
        } queue;
    }
    

    我反复地把元素放在两个队列前面

    queuePut((uint32_t)cookie, myClassInstance->queue.cookie, cookieQueueLen);
    queuePut((uint32_t)intValue, myClassInstance->queue.value, valueQueueLen);
    

    当我这样做时,随着时间的推移,我的值队列布局如下:

    0.0.0.0.0.0.0.0.0.0.
    0.0.0.0.0.0.0.0.0.0.
    0.0.0.0.0.0.0.0.0.0.
    1.0.0.0.0.0.0.0.0.0.
    1.0.0.0.0.0.0.0.0.0.
    0.0.0.0.0.0.0.0.0.0.
    0.0.0.0.0.0.0.0.0.0.
    0.0.0.0.0.0.0.0.0.0.
    0.0.0.0.0.0.0.0.0.0.
    0.0.0.0.0.0.0.0.0.0.
    

    当我移除第一行时 queuePut((uint32_t)cookie, ... 值队列显示了这一点(我希望它是什么):

    0.0.0.0.0.0.0.0.0.0.
    0.0.0.0.0.0.0.0.0.0.
    0.0.0.0.0.0.0.0.0.0.
    1.0.0.0.0.0.0.0.0.0.
    1.1.0.0.0.0.0.0.0.0.
    0.1.1.0.0.0.0.0.0.0.
    0.0.1.1.0.0.0.0.0.0.
    0.0.0.1.1.0.0.0.0.0.
    0.0.0.0.1.1.0.0.0.0.
    0.0.0.0.0.1.1.0.0.0.
    

    是什么引起的?

    当做, 埃里克

    1 回复  |  直到 14 年前
        1
  •  4
  •   jamesdlin    14 年前

    cookieQueueLen valueQueueLen

    void queuePut(uint32_t val, uint32_t *q, int qlen) {
        for (int i=qlen; i>0; i--) {
           q[i] = q[i-1];
        }
       q[0] = val;
    }
    

    qlen q[10] cookie value