Heim  >  Artikel  >  php教程  >  void und void* in C/C++

void und void* in C/C++

高洛峰
高洛峰Original
2016-12-13 13:17:301255Durchsuche

1. void

Das Schlüsselwort void repräsentiert das Konzept des „leeren Typs“. Der „leere Typ“ bedeutet hier jedoch nicht „irgendein Typ“, sondern bedeutet Nichtexistenz. Das heißt, C/C++ erlaubt Ihnen nicht, die Anweisung void a zu schreiben, und es gibt kein Ding vom Typ void.

void bedeutet „existiert nicht“, was sich in den beiden Anwendungen von void widerspiegeln kann:
1. Wenn void als Rückgabewerttyp einer Funktion verwendet wird, bedeutet dies, dass die Funktion einen Wert zurückgibt existiert nicht, d. h. die Funktion hat keinen Rückgabewert.
Zum Beispiel:
void FunctionNoReturn_0(std::string strName)
{
std::cout << strName << std::endl;
}
void FunctionNoReturn_1(std::string strName)
{
std::cout << strName << std::endl;
}
FunctionNoReturn_1 Obwohl in der Funktionskörper Es gibt keine explizite Return; Es gibt jedoch eine implizite Rückgabe, die darauf hinweist, dass die Funktion keinen Rückgabewert hat.
FunctionNoReturnType(void)
{
return 10;
}
In der C-Sprache wird jede Funktion, die den Rückgabewerttyp nicht einschränkt, vom Compiler als ganzzahliger Rückgabewert behandelt. anstatt keinen Wert zurückzugeben. Daher ist es richtig, dass die FunctionNoReturnType-Funktion 10 zurückgibt.
In C++ muss jede Funktion den Rückgabewerttyp einschränken, und es ist keine Rückgabewertbeschränkung zulässig. Daher meldet der C++-Compiler einen Fehler an FunctionNoReturnType.
2. Wenn void als Parametergrenze für eine Funktion verwendet wird, bedeutet dies, dass der Funktionsparameter nicht existiert, das heißt, die Funktion hat keinen formalen Parameter.
Zum Beispiel:
void FunctionNoArgument_0(void)
{
return;
}
void FunctionNoArgument_1()
{
return;
}
Hinweis: void FunctionNoArgument_1(); Dies bedeutet auch, dass es keine formalen Parameter gibt.
In der C-Sprache ist FunctionNoArgument_1(10); Der Compiler meldet keinen Fehler.
In der C-Sprache ist FunctionNoArgument_0(10); Der Compiler meldet einen Fehler.
In der C++-Sprache sind FunctionNoArgument_1(10); und FunctionNoArgument_0(10);
beide illegal. Der Compiler meldet einen Fehler.
Es spielt keine Rolle, ob in der C-Sprache kein Fehler vorliegt. Denn Parameter 10 hat keinen Einfluss auf das Ergebnis der Funktionsausführung. Allerdings kann die Codepflege versteckten Schaden verursachen und bei anderen zu Missverständnissen führen.

Erklärung: Da diese beiden Verwendungsmöglichkeiten von void vorgesehen sind, verwenden Sie sie. Das heißt, wenn eine Funktion keinen Wert zurückgibt, wird ihr Rückgabewerttyp als void geschrieben, und wenn eine Funktion keine formalen Parameter hat, werden ihre formalen Parameter als void geschrieben. Verlassen Sie sich nicht auf das Standardverhalten des Compilers, wenn Sie es nicht verstehen. Selbst wenn Sie die Standardoperation kennen, sollten Sie sich nicht darauf verlassen, denn es wird definitiv jemanden geben, der es nicht versteht, und andere werden Ihren Code nicht verstehen können.

2. void*

void* bedeutet „Null-Typ-Zeiger“, was sich von void* bedeutet „jeder Zeigertyp“ oder „der Zeiger bezieht sich auf einen Adresswert“. , aber der Objekttyp an dieser Adresse ist unbekannt.“ (Warum nicht void verwenden, um irgendeine Art von Daten darzustellen? Wie wir alle wissen, ist C/C++ eine statisch typisierte Sprache. Durch das Definieren einer Variablen wird Speicher zugewiesen. Allerdings belegen verschiedene Arten von Variablen unterschiedlichen Speicher. Wenn Sie eine Variable definieren Typ: Wie kann man dafür Speicher zuweisen? Daher gibt es in C und C++ keine Variablen jeglichen Typs. Allerdings haben alle Zeigertypvariablen, egal ob int*, char*, string*, Student* usw gleichen Speicherplatz, sodass „Zeiger jeglichen Typs“ definiert werden können).

C++/ANSI C:

void*-Zeiger unterstützen nur einige begrenzte Operationen: Vergleich mit einem anderen Zeiger; Übergabe eines void-Zeigers an eine Funktion oder Rückgabe eines void*-Zeigers von dieser; . Ein void*-Zeiger darf nicht zur Manipulation des Objekts verwendet werden, auf das er zeigt. Beispielsweise darf ein void*-Zeiger nicht dereferenziert werden. Arithmetische Operationen auf void*-Zeigern sind nicht zulässig.
GNU C:
GNU C gibt an, dass arithmetische Operationen auf void*-Zeigern mit char* konsistent sind.

void* bedeutet „Zeiger eines beliebigen Typs“, der hauptsächlich in den formalen Parametertypen und Rückgabewerttypen von Speicheroperationsfunktionen verwendet wird (Speicheroperationen haben also nichts mit dem Datentyp im Speicher zu tun). , jeder Typ ist akzeptabel).

memcpy 

Prototyp: extern void *memcpy(void *dest, void *src, unsigned int count);
Verwendung: #include
Funktion: Anzahl der Kopien aus dem Speicherbereich, auf den verwiesen wird durch src-Bytes in den Speicherbereich, auf den dest zeigt.
Hinweis: Die Speicherbereiche, auf die src und dest zeigen, dürfen sich nicht überschneiden und die Funktion gibt einen Zeiger auf dest zurück. ​
Hinweis: Im Vergleich zu strcpy trifft memcpy nicht auf „

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn