Что делает (интервал (*) []) var1 обозначают?

Я нашел этот пример кода, и я пытался погуглить что (int (*)[])var1 мог обозначать, но я не получил полезных результатов.

#include <unistd.h>
#include <stdlib.h>

int i(int n,int m,int var1[n][m]) {
    return var1[0][0];
}

int example() {
    int *var1 = malloc(100);
    return i(10,10,(int (*)[])var1);
} 

Обычно я работаю с VLAs в C99, таким образом, я привык к:

#include <unistd.h>
#include <stdlib.h>

int i(int n,int m,int var1[n][m]) {
    return var1[0][0];
}

int example() {
    int var1[10][10];
    return i(10,10,var1);
} 

Спасибо!

8
задан Richard Everett 21 May 2011 в 09:14
поделиться

3 ответа

11
ответ дан 5 December 2019 в 14:00
поделиться

Это типизация указателя, который указывает на массив int.

1
ответ дан 5 December 2019 в 14:00
поделиться

(int (*) []) - указатель на массив int s. Эквивалентно аргументу функции int [n] [m] .

Это обычная идиома в C: сначала выполните malloc, чтобы зарезервировать память, затем приведите ее к желаемому типу.

0
ответ дан 5 December 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: