c指向结构数组的指针

use*_*348 16 c arrays struct pointers

我知道这个问题已被问到很多,但我仍然不清楚如何访问结构.

我想创建一个结构数组的全局指针:

typdef struct test
{
    int obj1;
    int obj2;
} test_t;

extern test_t array_t1[1024];
extern test_t array_t2[1024];
extern test_t array_t3[1025];

extern test_t *test_array_ptr;

int main(void)
{
    test_array_ptr = array_t1;

    test_t new_struct = {0, 0};
    (*test_array_ptr)[0] = new_struct;
}
Run Code Online (Sandbox Code Playgroud)

但它给了我警告.我应该如何访问特定的结构[]

同样,我应该如何创建struct类型的指针数组?test_t *_array_ptr[2];

Ada*_*eld 17

您正在寻找的语法有点麻烦,但它看起来像这样:

// Declare test_array_ptr as pointer to array of test_t
test_t (*test_array_ptr)[];
Run Code Online (Sandbox Code Playgroud)

然后您可以像这样使用它:

test_array_ptr = &array_t1;
(*test_array_ptr)[0] = new_struct;
Run Code Online (Sandbox Code Playgroud)

要使语法更容易理解,您可以使用typedef:

// Declare test_array as typedef of "array of test_t"
typedef test_t test_array[];
...
// Declare test_array_ptr as pointer to test_array
test_array *test_array_ptr = &array_t1;
(*test_array_ptr)[0] = new_struct;
Run Code Online (Sandbox Code Playgroud)

CDECL实用程序是破译复杂的C声明,尤其是当数组和函数指针涉足有用.


Lih*_*ihO 5

test_t * test_array_ptr是指向的指针test_t。它可以是的单个实例的指针test_t,但是也可以是的实例数组的第一个元素的指针test_t

test_t array1[1024];

test_t *myArray;
myArray= &array1[0];
Run Code Online (Sandbox Code Playgroud)

myArray指向的第一个元素,array1并且指针算术允许您也将此指针视为数组。现在您可以访问的第二个元素,array1例如:myArray[1],它等于*(myArray + 1)

但是据我了解,您实际上想要在这里声明一个指向test_t该数组的指针的指针,该指针将表示一个指向数组的指针:

test_t array1[1024];
test_t array2[1024];
test_t array3[1025];

test_t **arrayPtr;
arrayPtr = malloc(3 * sizeof(test_t*));   // array of 3 pointers
arrayPtr[0] = &array1[0];
arrayPtr[1] = &array2[0];
arrayPtr[2] = &array3[0];
Run Code Online (Sandbox Code Playgroud)