c 中带有数组的 typedef

问题描述 投票:0回答:2

我对 C 中数组的 typedef 的理解有问题。 代码没有按预期工作。我在调试这个简单的代码时提供了一些屏幕截图。您可以看到,只有 array[0] 的第一个元素被分配给 0xff。 [1] 和 [2] 元素未分配。

探索change_array函数的汇编代码,我注意到array + 0x28和array + 0x50的地址用于分配[1]和[2]元素。看起来像使用了 TMyArray[10][n] 。

所以,我不知道如何访问函数change_array中的数组元素。

    typedef int TMyArray[10];
    TMyArray test_array = {0};

    void change_array(TMyArray * array)
    {
    *array[0] = 0xff;
    *array[1] = 0xff;   // wrong!
    *array[2] = 0xff;   // wring!
    }

    int main()
    {
    change_array(&test_array);
    return 0;
    }


debugger screenshot

我希望对此行为有任何解释。

arrays c typedef
2个回答
0
投票

一元

*
的优先级低于后缀
[]
运算符,因此表达式

*array[1]

被解析为

*(array[1])

意味着您正在尝试取消引用单个数组元素,这不是您想要的。相反,您需要取消引用

array
first,然后索引到结果中:

(*array)[0] = 0xff;
(*array)[1] = 0xff;
(*array)[2] = 0xff;

0
投票

请注意,我们通常不会传递指向数组的指针,而是传递指向数组第一个元素的指针。

typedef int TMyArray[10];

void change_array( TMyArray p ) {  // Would be clearer as identical `int *p`.
   p[0] = 0xff;
   p[1] = 0xff;
   p[2] = 0xff;
}

int main( void ) {
   TMyArray test_array = { 0 };
   change_array( test_array );
}
© www.soinside.com 2019 - 2024. All rights reserved.