C ++ rādītājs, lai anulētu (ar piemēriem)

Šajā apmācībā mēs uzzināsim par tukšām norādēm un to izmantošanu, izmantojot piemērus.

Pirms turpināt šo apmācību, noteikti pārbaudiet C ++ rādītājus.

Programmā C ++ mēs nevaram piešķirt viena datu tipa mainīgā adresi cita datu tipa rādītājam. Apsveriet šo piemēru:

 // pointer is of int type int *ptr; // variable is of double type double d = 9.0; // Error // can't assign double* to int* ptr = &d;

Šeit kļūda radās tāpēc, ka adrese ir doubletipa mainīgais. Tomēr rādītājs ir intveida.

Šādās situācijās mēs varam izmantot rādītāju, lai atceltu (tukšākas norādes) C ++. Piemēram,

 // void pointer void *ptr; double d = 9.0; // valid code ptr = &d;

Neesošu rādītājs ir vispārīgs rādītājs, kas tiek izmantots, kad mēs nezinām datu tipu mainīgo ka rādītājs norāda uz.

1. piemērs: C ++ Void Pointer

 #include using namespace std; int main() ( void* ptr; float f = 2.3f; // assign float address to void ptr = &f; cout << &f << endl; cout << ptr << endl; return 0; )

Rezultāts

 0xffd117ac 0xffd117ac

Šeit rādītājam ptrtiek piešķirta vērtība &f.

Izeja parāda, ka tukšais rādītājs ptr saglabā floatmainīgā f adresi .

Tāpat voidkā tukša veida, nevar norādīt uz tukšām norādēm.

 void* ptr; float* fptr; float f = 2.3; // assign float address to void pointer ptr = &f; cout << *ptr << endl; // Error // assign float address to float pointer fptr = &f; cout << *fptr << endl; // Valid

2. piemērs: Void Pointer satura drukāšana

Lai izdrukātu tukša rādītāja saturu, mēs izmantojam static_castoperatoru. Tas pārveido rādītāju no void*veida uz atbilstošo adreses datu tipu, kuru rādītājs glabā:

 #include using namespace std; int main() ( void* ptr; float f = 2.3f; // assign float address to void pointer ptr = &f; cout << "The content of pointer is "; // use type casting to print pointer content cout << *(static_cast(ptr)); return 0; )

Rezultāts

 Rādītāja saturs ir 2.3

Šī programma izdrukā adreses vērtību, uz kuru norāda voidrādītājs ptr.

Tā kā mēs nevaram novirzīt voidrādītāju, mēs nevaram to izmantot *ptr.

Tomēr, ja pārveidojam void*rādītāja tipu par float*tipu, mēs varam izmantot vērtību, uz kuru norāda voidrādītājs.

Šajā piemērā mēs izmantojām static_castoperatoru, lai pārveidotu rādītāja datu tipu no void*uz float*.

C stila liešana

Vērtības drukāšanai varam izmantot arī C stila liešanu.

 // valid cout << *((float*)ptr);

Tomēr static_castpriekšroka tiek dota C stila liešanai.

Piezīme: spēkā norādes nevar tikt izmantota, lai uzglabātu adreses mainīgo ar constvai volatileapzīmējumiem.

 void *ptr; const double d = 9.0; // Error: invalid conversion from const void* to void* ptr = &d;

Interesanti raksti...