2010-06-04 17 views
8

Ich fand diesen Beispielcode und ich versuchte zu googlen, was (int (*)[])var1 für stehen könnte, aber ich habe keine brauchbaren Ergebnisse.Was bedeutet (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); 
} 

Normalerweise arbeite ich mit VLAs in C99 so bin ich früher:

#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); 
} 

Dank!

Antwort

11
+3

große Referenzseite! – xtofl

+0

Ich würde vorschlagen, das 'cdecl'-Tool, schön, ein Web-Front-End dafür zu sehen :) – crazyscot

+1

Ich bin verwirrt - es gibt keinen solchen Typ wie" Array von int ". Array-Typen müssen eine Größe haben, auch wenn sie variabel ist. Ist dieser Typ in der Besetzung wirklich gültig? Wenn ja, was bedeutet das? Was ist 'sizeof * (int (*) []) 0'? –

0

(int (*)[]) ist ein Zeiger auf ein Array von int s. Entspricht dem Funktionsargument int[n][m].

Dies ist ein gängiges Idiom in C: Zuerst macoc Speicherplatz reservieren, dann auf den gewünschten Typ.

+0

Ich denke, du solltest deine Antwort umformulieren, weil 'int [] []' keine gültige C-Syntax ist und es unklar bleibt, was du meinst. – Jens

+0

Und warum würden Sie die Rückgabe von malloc abwerfen? Es ist ein Pointer-to-void, der jedem Pointer-Typ ohne C-Cast zugewiesen werden kann (In C++ verwenden Sie nicht zuerst malloc, sondern 'new'). – Jens

+0

@Jens: Ich hätte einfach den Mund halten sollen :) Ich bin kein C-Guru, also konnte ich nur interpretieren, was der Code bedeutete, nicht sehen, was er gelesen haben sollte. – xtofl

1

Es handelt sich um eine Typumwandlung in einen Zeiger, der auf ein Array von int verweist.