konvertieren von int-array zu pointer in C
void test()
{
int buf[1000];
//populate buf
foo(buf);//is this correct? Can we pass buf as a pointer that foo expects?
}
void foo(void*ptr)
{}
BEARBEITEN:
wenn foo wurden fwrite, wäre die oben(Mechanismus der Weitergabe buf so zu liefern fwrite mit Inhalt zu schreiben in eine Datei) noch anwendbar?
- haben Sie einen C-compiler auf Ihrem system installiert?
- ja, das Tue ich. Warum fragst du?
- Nach dem Bearbeiten: in den meisten bewegen
buf
zerfällt zu einem Zeiger auf sein erstes element (buf
zerfällt in einen Wert vom Typint*
). Undvoid*
ist das Besondere, dass es zugeordnet werden kann, hin und her zwischen Zeigern auf Objekte. Sie können gerne Lesen Abschnitt 6 von der C-FAQ ... und die anderen Abschnitte auch 🙂 - Ja, aber das ist, was ich möchte, richtig? Nur ein int* - Zeiger. tun, danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seine perfekt gültiges C.
foo
argument ist ein Zeiger, kann auf jede Art. Wenn Sie ein array übergeben, es zerfällt zu einem Zeiger auf das erste element des Arrays (d.h.,Adresse Position des ersten Elements übergeben wird). So,Ja, können Sie das tun.
buf ist der base-pointer des Arrays.
Ja, Sie wird immer passieren buf zur Funktion als Zeiger.
Ja, es ist richtig. Sie können den "ptr" - Zeiger in Ihrer Funktion foo.
http://codepad.org/HwYd0GAh
Als die anderen Antworten hingewiesen, ja, können Sie pass
buf
auf die Funktion.Jedoch innerhalb der Funktion die variable
ptr
Typvoid*
. Und es gibt nur ein paar Dinge, die Sie tun können, mitptr
selbst. In der Regel wandeln Sie es (mit oder ohne cast) zu etwas Relevantes, wieint*
.foo
Funktion betroffen ist,buf
existiert nicht.ptr
ist der Typvoid*
was bedeutet, es kann "sicher" umgewandelt werden, um andere Zeiger-Typ (der compiler übernimmt der Programmierer weiß, was er/Sie tun).foo
bräuchte, um zu wissen, die Größe von den Datenptr
Punkte zu.foo()
benötigen die Daten als zusätzliches argument, und werden genannt:foo(buf, sizeof(buf))
. Oder nutzen Sie 2 zusätzliche Argumente, element-Größe und element zählen, wiefwrite()
hat:foo(buf, sizeof(int), 1000)