Τι είναι void* σε C και C++

Ti Einai Void Se C Kai C



Η C και η C++ είναι δύο γλώσσες προγραμματισμού που βασίζονται σε μεγάλο βαθμό σε δείκτες για τη διαχείριση της μνήμης και τον χειρισμό δεδομένων. Οι δείκτες είναι μεταβλητές που αποθηκεύουν διευθύνσεις μνήμης, οι οποίες επιτρέπουν στα προγράμματα να έχουν πρόσβαση και να χειρίζονται δεδομένα που είναι αποθηκευμένα στη μνήμη. Ένας ειδικός τύπος δείκτη είναι ο δείκτης κενού (κενό*) , επίσης γνωστό ως α γενικός δείκτης .

Τι είναι ένα Void Pointer (κενό*);

Ένας δείκτης κενού, γνωστός και ως γενικός δείκτης, είναι ένας δείκτης που δεν συσχετίζεται με κανένα συγκεκριμένο τύπο δεδομένων, καθιστώντας τον κατάλληλο για την κατάδειξη οποιουδήποτε τύπου δεδομένων. Με άλλα λόγια, α κενός δείκτης μπορεί να δείχνει σε έναν ακέραιο, έναν χαρακτήρα, μια συμβολοσειρά ή οποιονδήποτε άλλο τύπο δεδομένων. Αυτή η ευελιξία καθιστά τους δείκτες κενού ένα ισχυρό εργαλείο στον προγραμματισμό C και C++.

Δήλωση του Void Pointer σε C και C++

Σε C και C++, το κενός δείκτης δηλώνεται με την ακόλουθη σύνταξη:







κενός * πτρ ;

Χρήση Void Pointers σε C και C++

Κενοί δείκτες στο C χρησιμοποιούνται κυρίως όταν ο τύπος δεδομένων μιας μεταβλητής δεν είναι γνωστός ή μπορεί να διαφέρει κατά το χρόνο εκτέλεσης. Επιτρέπουν έναν γενικό τρόπο αποθήκευσης και χειρισμού δεδομένων χωρίς να χρειάζεται να γνωρίζετε τον συγκεκριμένο τύπο δεδομένων τους. Είναι χρήσιμο ειδικά όταν έχουμε να κάνουμε με συναρτήσεις ή δομές δεδομένων που μπορούν να χειριστούν διαφορετικούς τύπους δεδομένων.



Μια κοινή χρήση του κενοί δείκτες είναι σε λειτουργίες εκχώρησης μνήμης όπως malloc() που επιστρέφει ένα κενό σημείο δείκτη σε ένα μπλοκ μνήμης που μπορεί να χρησιμοποιηθεί για την αποθήκευση οποιουδήποτε τύπου δεδομένων. Ο προγραμματιστής μπορεί στη συνέχεια να μεταφέρει τον δείκτη κενού στον κατάλληλο τύπο δεδομένων για πρόσβαση και χειρισμό των δεδομένων που είναι αποθηκευμένα στο εκχωρημένο μπλοκ μνήμης.



Μια άλλη χρήση των κενών δεικτών στο C είναι το in δείκτες λειτουργίας , οι οποίες είναι μεταβλητές που αποθηκεύουν τη διεύθυνση μνήμης μιας συνάρτησης. Οι δείκτες κενού μπορούν να χρησιμοποιηθούν για την αποθήκευση της διεύθυνσης μνήμης οποιασδήποτε συνάρτησης, ανεξάρτητα από τον τύπο επιστροφής ή τη λίστα παραμέτρων, επιτρέποντας μεγαλύτερη ευελιξία στη χρήση του δείκτη συνάρτησης.





Η χρήση του κενοί δείκτες στη C++ είναι σχεδόν παρόμοια, ωστόσο, μπορούν επίσης να χρησιμοποιηθούν για τη δημιουργία μιας γενικής διεπαφής για αντικείμενα διαφορετικών κλάσεων. Αυτό επιτυγχάνεται συχνά μέσω της χρήσης εικονικών συναρτήσεων, οι οποίες επιτρέπουν την ομοιόμορφη αντιμετώπιση αντικειμένων διαφορετικών κλάσεων. Επιπλέον, η C++ προσφέρει πιο αυστηρό έλεγχο τύπου από το C, πράγμα που σημαίνει ότι η χρήση κενοί δείκτες εσφαλμένα μπορεί να οδηγήσει σε περισσότερα σφάλματα και σφάλματα.

Σημεία που πρέπει να ληφθούν υπόψη κατά τη χρήση κενών δεικτών σε C και C++

Εδώ είναι μερικά σημεία που πρέπει να λάβετε υπόψη κατά τη χρήση κενοί δείκτες σε C και C++.



1: Σε Γ, κενός* μπορεί να χρησιμοποιηθεί ως επιστρεφόμενη τιμή και παράμετρος συνάρτησης, αλλά στη C++ πρέπει να έχετε έναν συγκεκριμένο τύπο δεδομένων δείκτη.

Για παράδειγμα:

Στο C, ο κωδικός δίνεται παρακάτω:

#include

#include

κενός * add_numbers ( ενθ ένα , ενθ σι ) {

ενθ * αποτέλεσμα = malloc ( μέγεθος του ( ενθ ) ) ;

* αποτέλεσμα = ένα + σι ;

ΕΠΙΣΤΡΟΦΗ ( κενός * ) αποτέλεσμα ;

}

κενός print_result ( κενός * αποτέλεσμα ) {

ενθ * πτρ = ( ενθ * ) αποτέλεσμα ;

printf ( 'Το αποτέλεσμα είναι: %d \n ' , * πτρ ) ;

Ελεύθερος ( πτρ ) ;

}

ενθ κύριος ( ) {

ενθ num1 = 5 , num2 = 7 ;

κενός * αποτέλεσμα = add_numbers ( num1 , num2 ) ;

print_result ( αποτέλεσμα ) ;

ΕΠΙΣΤΡΟΦΗ 0 ;

}

Ο παραπάνω κώδικας ορίζει μια συνάρτηση add_numbers() που επιστρέφει α κενός* δείκτης στο αποτέλεσμα της προσθήκης δύο ακεραίων αριθμών που μεταβιβάζονται ως ορίσματα. Η λειτουργία print_result() παίρνει α void* δείκτης και εκτυπώνει το αποτέλεσμα. Στη συνάρτηση main(), καλούμε add_numbers() και περάστε το που προκύπτει void* δείκτης προς την print_result() Για εκτύπωση.

Στην C++, απαιτείται συγκεκριμένος τύπος δεδομένων.

#include

χρησιμοποιώντας το namespace std ;

κενός printInt ( ενθ * σε ένα ) {

cout << 'Ο ακέραιος είναι:' << * σε ένα << endl ;

}

ενθ κύριος ( ) {

ενθ Χ = 10 ;

ενθ * πτρ = & Χ ;

printInt ( πτρ ) ;

ΕΠΙΣΤΡΟΦΗ 0 ;

}

2: Στο C, μπορείτε να μετατρέψετε τον κενό δείκτη σε άλλο τύπο δείκτη μέσω σιωπηρή μετατροπή. Αλλά στη C++ πρέπει να χρησιμοποιήσετε το ρητή μετατροπή για να μετατρέψετε το κενός δείκτης σε οποιονδήποτε άλλο τύπο δείκτη.

Ακολουθεί ένα απλό παράδειγμα κώδικα τόσο για C όσο και για C++ για να δείξουμε τη διαφορά μεταξύ των σιωπηρή και ρητή μετατροπή του κενοί δείκτες σε άλλους τύπους δείκτη:

Στο C, χρησιμοποιείται ο ακόλουθος κώδικας:

#include

κενός εκτύπωσηΧαρ ( κενός * κεφ ) {

απανθρακώνω ντο = * ( απανθρακώνω * ) κεφ ;

printf ( '%ντο \n ' , ντο ) ;

}

ενθ κύριος ( ) {

απανθρακώνω ντο = 'ένα' ;

κενός * πτρ = & ντο ;

εκτύπωσηΧαρ ( πτρ ) ;

ΕΠΙΣΤΡΟΦΗ 0 ;

}

Ο παραπάνω κώδικας ορίζει μια συνάρτηση εκτύπωσηΧαρ που παίρνει έναν δείκτη κενού ως παράμετρο και εκτυπώνει τον χαρακτήρα που είναι αποθηκευμένος σε αυτήν τη θέση μνήμης. Στην κύρια συνάρτηση, μια μεταβλητή char ντο ορίζεται και η διεύθυνσή του αποθηκεύεται σε έναν κενό δείκτη πτρ. ο εκτύπωσηΧαρ τότε η συνάρτηση καλείται με το κενός δείκτης 'ptr' ως επιχείρημα. Ο δείκτης κενού μετατρέπεται ρητά σε δείκτη χαρακτήρων στο 'printChar' λειτουργία για πρόσβαση και εκτύπωση της αποθηκευμένης τιμής 'ντο' .

Στην C++, ο κώδικας δίνεται παρακάτω:

#include

κενός printInt ( κενός * σε ένα ) {

ενθ * πτρ = static_cast < ενθ *> ( σε ένα ) ;

std :: cout << * πτρ << std :: endl ;

}

ενθ κύριος ( ) {

ενθ Χ = 10 ;

κενός * πτρ = & Χ ;

printInt ( πτρ ) ;

ΕΠΙΣΤΡΟΦΗ 0 ;

}

Ο παραπάνω κώδικας ορίζει μια συνάρτηση printInt που παίρνει έναν κενό δείκτη num ως παράμετρο και τον μεταφέρει σε έναν ακέραιο δείκτη χρησιμοποιώντας το τελεστής static_cast . Στη συνέχεια, η συνάρτηση εκτυπώνει την τιμή του ακέραιου αριθμού στον οποίο δείχνει ο μεταφερόμενος δείκτης. Στην κύρια συνάρτηση ορίζεται μια ακέραια μεταβλητή x και η διεύθυνσή της αποθηκεύεται στο a κενός δείκτης ptr, που στη συνέχεια περνά στο printInt λειτουργία. Η έξοδος του προγράμματος είναι η τιμή του x, που είναι 10.

Τελικές σκέψεις

ο κενός Οι δείκτες σε C και C++ παρέχουν έναν ισχυρό τρόπο χειρισμού δεδομένων χωρίς να χρειάζεται να γνωρίζετε τον συγκεκριμένο τύπο δεδομένων τους. Είναι χρήσιμα για την εκχώρηση μνήμης και τους δείκτες συναρτήσεων, καθώς και για τη δημιουργία μιας γενικής διεπαφής για αντικείμενα διαφορετικών κλάσεων στη C++. Ωστόσο, είναι σημαντικό να ληφθούν υπόψη οι διαφορές μεταξύ C και C++ στη χρήση τους κενοί δείκτες , όπως η ανάγκη για συγκεκριμένους τύπους δεδομένων στη C++ και η ανάγκη για ρητή μετατροπή κατά τη μετάδοση κενών δεικτών σε άλλους τύπους δεικτών. Η προσεκτική εξέταση αυτών των σημείων μπορεί να οδηγήσει σε πιο αποτελεσματική και αποτελεσματική χρήση κενοί δείκτες στον προγραμματισμό.