Что означает (int (*) []) var1? - PullRequest
8 голосов
/ 04 июня 2010

Я нашел этот пример кода и попытался Google, что может означать (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);
} 

Обычно я работаю с VLA в 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);
} 

Спасибо!

Ответы [ 3 ]

11 голосов
/ 04 июня 2010
1 голос
/ 04 июня 2010

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

0 голосов
/ 04 июня 2010

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

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

...