Wenn eine Zeigervariable deklariert wird, gibt es jemals eine Verwendung für mehr als einen Stern? Ich weiß, wenn Sie einen Zeiger auf einen anderen haben möchten, würden Sie mehrere verwenden, aber nur um zu klären, wenn Sie erklären, dass Sie immer noch nur einen setzen?Zeiger mit mehreren Sternchen?
Antwort
weard Dinge: ein Beispiel von 3 Sternchen:
const char **stringArray;
jetzt, wenn Sie dieses Array zuordnen wollen in eine Funktion als Argument, müssen Sie folgendes:
void stringAllocator(const char ***stringArray, int size) {
*stringArray = (const char **) malloc(size);
}
...
stringAllocator (&stringArry, 20);
...
so können Sie mehr als 3 als auch vorstellen, obwohl ich nie hatte, mehr als 4 gesehen :-)
eineine etwas seltsamen Sachen in C++ Sterne in Kombination mit &
void stringAllocator(const char **&stringArray, int size) {
stringArray = (const char **) malloc(size);
}
...
stringAllocator (stringArry, 20);
...
Im obigen Fall arbeiten als Stern Reduktion Technik. Es tut das selbe wie das erste Beispiel
Bei der Deklaration einer Zeigervariable, gibt es jemals eine Verwendung für mehr als ein Sternchen?
Sicher, es gibt Verwendungen für Deklarationen von Zeiger auf Zeigervariablen.
Nehmen wir an, Sie haben eine Funktion, die einige Klasseninstanzen intern zuweist, aber gleichzeitig einen Fehler anzeigen muss. Sie können es wie
bool CreateSomeType(SomeType** pointerToSomeTypePointer) {
try {
*pointerToSomeTypePointer = new SomeType();
}
catch(...) {
return false;
}
return true;
}
eine Unterschrift geben und wie diese A
SomeType* ptr = nullptr;
if(CreateSomeType(&ptr)) {
// Use ptr
// ...
delete ptr;
}
else {
// Log failure
}
Dies ist für Fremdfunktionsschnittstellen nützlicher als klassischer C++ - Code, wo Sie einfach 'std :: unique_ptr
@Ben Seien Sie versichert, ich würde das natürlich nicht für den Produktionscode verwenden. Nur um den Anwendungsfall für Zeiger auf Zeiger zu demonstrieren. – user0042
genannt wird häufiger Anwendungsfall von zwei Sternen ist, wenn eine Funktion einen Zeigerwert zu verändern hat, z.B. in ADT-Implementierungen wie "Stack". Obwohl dieses Design mehr C als C++ ist (in C++ können Sie andere Mechanismen wie Referenzen verwenden), siehe das folgende Beispiel. Ich schrieb es in "C" -Stil (auch wenn Sie C erwähnt ++):
struct node {
int x;
struct node* next;
};
// this one works:
void insertBeforeHead(node** head, int value) {
struct node* newNode = (struct node*)malloc(sizeof(struct node));
newNode->next = *head;
newNode->x = value;
*head = newNode; // alters the pointer value of the caller
}
// this one does not work:
void insertBeforeHead2(node* head, int value) {
struct node* newNode = (struct node*)malloc(new Node);
newNode->next = head;
newNode->x = value;
head = newNode; // alters only the local copy of the pointer value
}
int main() {
struct node* mainHead = NULL;
insertBeforeHead(&mainHead,10); // changes the value of mainHead
insertBeforeHead2(mainHead,20); // does not change the value of mainHead, althouth it should.
}
- 1. Anrufweiterleitung GOIP16 mit Sternchen
- 2. java schachbrettmuster mit sternchen
- 3. Assemblyversionsinformationen Sternchen
- 4. Die Bedeutung von "Sternchen Sternchen" in C: * (flüchtige Int *) foo
- 5. So urlencode das Sternchen
- 6. installieren Sternchen Web-Interface
- 7. Sternchen PAMI Anruf Ausgabe
- 8. Sternchen zoiper Registrierung fehlgeschlagen
- 9. SIP-Registrierung auf Sternchen
- 10. Erlaube Sternchen in URL
- 11. Erforderliches Sternchen im Eingabefeld
- 12. Regex Sternchen Nutzung
- 13. Wie Sternchen Anwendung
- 14. Sternchen außerhalb von Funktionsaufrufen
- 15. Traceroute Drucken Sternchen Symbol
- 16. Wie Standard-Sternchen entfernen?
- 17. Ist Gruppenruf über SIP mit Sternchen möglich?
- 18. Umgebungsvariablen mit zwei Sternchen in Dockerfile
- 19. Regular Expression eckigen Klammern mit Sternchen
- 20. Verwenden CONTAINSTABLE mit einem FORMSOF und Sternchen
- 21. Verwendung von Zählern mit Sternchen in Zelle
- 22. mit Doppel Sternchen Platzhalter entfernen funktioniert nicht
- 23. Zeiger deklarieren; Sternchen links oder rechts vom Leerzeichen zwischen Typ und Name?
- 24. Mehrere Sternchen im Wildcard-Zertifikat
- 25. dialogischen Diva + vmware esxi + Sternchen
- 26. C++ - Funktionen: Ampersand vs Sternchen
- 27. Sternchen confbridge - wie japanische Version
- 28. Regex Match Saiten zwischen Sternchen
- 29. Alphabet Muster einschließlich Sternchen -Java
- 30. Python blank Sternchen in Funktionsargument
Ein Zeiger auf ein 'int *' ist ein 'int **'. Ein 'int *' kann nicht auf ein 'int * 'zeigen. Wenn Sie das Bedürfnis haben, zwei Sterne zu verwenden, sollten Sie sich einen Moment Zeit nehmen, um Ihr Design zu überdenken. Wenn Sie das Bedürfnis haben, drei oder mehr Sterne zu benutzen, können Sie ein [Drei-Sterne-Programmierer] sein (http://wiki.c2.com/?ThreeStarProgrammer) (Spoiler: das ist keine gute Sache). –
Ja, Sie können so viele Sternchen verwenden, wie Sie möchten, aber Sie sollten dies nicht tun, sonst können Sie sich in [Drei-Sterne-Programmierer] (http://wiki.c2.com/?ThreeStarProgrammer) verwandeln. – VTT
Wie verwenden Sie C++, warum verwenden Sie sogar rohe Zeiger? –