Osoittimet C-ohjelmoinnissa: Mikä on osoitin, tyypit ja esimerkit

Mikä on osoitin C: ssä?

Osoitin C: ssä on muuttuja, joka tallentaa toisen muuttujan osoitteen. Osoitinta voidaan käyttää myös viittaamaan toiseen osoitintoimintoon. Osoitinta voidaan lisätä / vähentää, ts. Osoittaa seuraavaan / edelliseen muistipaikkaan. Osoittimen tarkoituksena on säästää muistia ja saavuttaa nopeampi suoritusaika.

Osoittimien käyttäminen C: ssä

Jos ilmoitamme muuttujan v tyypiksi int, v tallentaa arvon.

v on nyt nolla.

Jokaisella muuttujalla on kuitenkin arvon lisäksi myös osoite (tai yksinkertaisesti sanottuna, missä se sijaitsee muistissa). Osoite voidaan noutaa asettamalla muuttujan nimen eteen ampersandi (&).

Jos tulostat muuttujan osoitteen näytölle, se näyttää kuten täysin satunnaisluku (lisäksi se voi olla erilainen juoksulta toiselle).

Kokeilkaamme tätä käytännössä osoittimella C esimerkki

Tämän ohjelman tulos on -480613588.

Mikä on osoitin? Osoitin tallentaa arvon tallentamisen sijaan muuttujan osoitteen.

Osoittimen muuttuja

Int * y = & v;

MUUTTUVA

POINTER

Nimettyyn tallennus- / muistiosoitteeseen tallennettu arvo

Muuttuja, joka osoittaa toisen muuttujan tallennus- / muistiosoitteeseen

Osoittimen julistaminen

Kuten muuttujat, osoittimet C progra mming on ilmoitettava ennen kuin niitä voidaan käyttää ohjelmassa. Osoittimille voidaan antaa haluamasi nimi, kunhan ne noudattavat C: n nimeämissääntöjä. Osoitinilmoituksella on seuraava muoto.

data_type * pointer_variable_name;

Täällä

  • data_type on osoittimen C-muuttujatyyppien perustyyppi ja osoittaa muuttujan tyypin, johon osoitin osoittaa.
  • Tähti (*: sama käytetty tähti kerroin), joka on epäsuora operaattori, ilmoittaa osoittimen.

Katsotaanpa joitain kelvollisia osoittimen ilmoituksia tässä C-osoittimen opetusohjelmassa:

Alusta osoitin

Osoittimen ilmoituksen jälkeen alustamme sen kuten vakiomuuttujat muuttuvalla osoitteella. Jos C-ohjelmoinnin osoittimia ei alusteta eikä niitä käytetä ohjelmassa, tulokset ovat arvaamattomia ja mahdollisesti tuhoisia.

Saadaksesi muuttujan osoitteen käytämme ampersand (&) -operaattoria, joka on sijoitettu muuttujan nimen eteen, jonka osoitetta tarvitsemme. Osoittimen alustus tehdään seuraavalla syntaksilla.

Osoittimen syntakse

 pointer = &variable; 

Alla on yksinkertainen ohjelma osoittimen kuvaamiseen:

Tulos:

Address stored in a variable p is:60ff08Value stored in a variable p is:10
Operaattori Merkitys
* Palvelee kahta tarkoitusta

  1. Osoittimen ilmoitus
  2. Palauttaa viitatun muuttujan arvon
& Palvelee vain yhtä tarkoitusta

  • Palauttaa muuttujan osoite

Osoittintyypit C: ssä

Seuraavassa on erityyppisiä osoittimia C: ssä:

Nollaosoitin

Voimme luoda nollaosoittimen osoittamalla nolla-arvon osoittimen ilmoituksen aikana. Tämä menetelmä on hyödyllinen, kun osoittimelle ei ole määritetty osoitetta. Nollaosoitin sisältää aina arvon 0.

Seuraava ohjelma kuvaa nollaosoittimen käyttöä:

#include <stdio.h>int main(){int *p = NULL; //null pointerprintf("The value inside variable p is:\n%x”,p);return 0;}

Tulos:

The value inside variable p is:0

Void Pointer

C-ohjelmoinnissa tyhjää osoitinta kutsutaan myös yleiseksi osoittimeksi. Sillä ei ole vakiotietotyyppiä. Tyhjä osoitin luodaan käyttämällä avainsanaa void. Sitä voidaan käyttää minkä tahansa muuttujan osoitteen tallentamiseen.

Seuraava ohjelma havainnollistaa tyhjän osoittimen käyttöä:

#include <stdio.h>int main(){void *p = NULL; //void pointerprintf("The size of pointer is:%d\n",sizeof(p));return 0;}

Tulos:

The size of pointer is:4

Villi osoitin

Osoittimen sanotaan olevan villi osoitin, jos sitä ei alusteta mihinkään. Tämäntyyppiset C-osoittimet eivät ole tehokkaita, koska ne voivat viitata tuntemattomaan muistipaikkaan, mikä saattaa aiheuttaa ongelmia ohjelmassamme ja se voi johtaa ohjelman kaatumiseen. On aina oltava varovainen työskennellessäsi villien viitteiden kanssa.

Seuraava ohjelma kuvaa villin osoittimen käyttöä:

#include <stdio.h>int main(){int *p; //wild pointerprintf("\n%d",*p);return 0;}

Tulos

timeout: the monitored command dumped coresh: line 1: 95298 Segmentation fault timeout 10s main

Muut ”c” -osoittimen tyypit ovat seuraavat:

  • Viipaleva osoitin
  • Monimutkainen osoitin
  • Lähellä osoitinta
  • Kaukosäädin
  • Valtava osoitin

Suora ja epäsuora yhteysosoitin

C: ssä on kaksi vastaavaa tapaa muuttujan sisällön käyttämiseen ja käsittelyyn

  • Suora pääsy: käytämme suoraan muuttujan nimeä
  • Epäsuora käyttö: käytämme muuttujan osoittinta

Ymmärretään tämä alla olevan ohjelman avulla.

Kun ohjelma on koottu virheettömästi, tulos on:

Direct access, var = 1Indirect access, var = 1The address of var = 4202496The address of var = 4202496Indirect access, var = 48

Osoittimen aritmeettisuus C: ssä

Osoitinoperaatiot on tiivistetty seuraavaan kuvaan

Osoitinoperaatiot

Prioriteettitoiminto (etusija)

Kun työskentelemme C-osoittimien kanssa, on noudatettava seuraavat prioriteettisäännöt:

Jos P-osoitin osoittaa X-muuttujaa, * P: tä voidaan käyttää missä tahansa X voidaan kirjoittaa.

Seuraavat lausekkeet vastaavat:

Jälkimmäisessä tapauksessa tarvitaan sulkeita: koska yksisuuntaiset operaattorit * ja ++ arvioidaan oikealta vasemmalle ilman sulkeita osoittimen P kasvaisi, ei esine, johon P osoittaa.

Alla olevassa taulukossa on esitetty aritmeettinen ja perustoiminto, jota voidaan käyttää käsitellessäsi C-osoittimia

Käyttö Selitys
Määritys int * P1, * P2 P1 = P2; P1 ja P2 osoittavat samaan kokonaislukumuuttujaan
Lisäys ja vähennys Int * P1; P1 ++; P1–;
Siirtymän lisääminen (vakio) Tämän avulla osoitin voi siirtää N elementtiä taulukossa. Osoitinta kasvatetaan tai pienennetään N-kertoimella muuttujatyypin tavujen lukumäärällä. P1 + 5;

C osoittimet & Esimerkkitaulukot

Perinteisesti me päästä matriisielementteihin indeksin avulla, mutta tämä menetelmä voidaan eliminoida osoittimilla. Osoittimilla on helppo käyttää kutakin taulukkoelementtiä.

Tulos

12345

Tietyn numeron lisääminen osoittimeen siirtää osoittimen sijainnin lisäystoiminnolla saatuun arvoon. Oletetaan, että p on osoitin, joka osoittaa tällä hetkellä muistipaikkaan 0, jos suoritamme seuraavat lisäysoperaatiot, p + 1, se suoritetaan tällä tavalla:

Osoittimen lisäys / lisäys

Koska p osoittaa tällä hetkellä sijaintiin 0 lisäämisen jälkeen 1, arvosta tulee 1 ja siten osoitin osoittaa muistipaikkaan 1.

C Osoittimet ja merkkijonot esimerkkeineen

Merkkijono on joukko char-objekteja, joka päättyy nollamerkkiin ”\ 0”. Voimme manipuloida merkkijonoja osoittimilla. Tämä C-esimerkin osoitin selittää tämän osan.

Tulos

First character is:HNext character is:ePrinting all the characters in a stringHelloGuru99!

Toinen tapa käsitellä merkkijonoja on joukko osoittimia, kuten seuraavassa Ohjelma:

Tulos:

Please remember these materials:ironcoppergold

Osoittimien edut C: ssä

  • Osoittimet ovat hyödyllisiä muistipaikat.
  • Osoittimet tarjoavat tehokkaan tavan päästä matriisirakenteen elementteihin.
  • Osoittimia käytetään sekä dynaamiseen muistin allokointiin että jakautumiseen.
  • Osoittimia käytetään muodostamaan monimutkaisia tietorakenteita, kuten linkitetty luettelo, kaavio, puu jne.

Osoittimien haitat C: ssä

  • Osoittimet ovat vähän monimutkaisia ymmärtää.
  • Osoittimet voivat johtaa erilaisiin virheisiin, kuten segmentointivirheisiin, tai voivat käyttää muistipaikkaa, jota ei tarvita lainkaan.
  • Jos osoittimelle annetaan väärä arvo, se voi aiheuttaa muistivirheitä.
  • Osoittimet ovat myös vastuussa muistivuodoista.
  • Osoittimet ovat suhteellisen hitaampia kuin muuttujien.
  • Ohjelmoijien on vaikea työskennellä osoittimien kanssa; Siksi ohjelmoijan vastuulla on manipuloida osoitinta huolellisesti.

Yhteenveto

  • Osoitin ei ole muuta kuin muistipaikka, johon tiedot tallennetaan.
  • Osoitinta käytetään muistipaikan käyttämiseen.
  • Osoittimia on erityyppisiä, kuten nollaosoitin, villi osoitin, tyhjäosoitin ja muun tyyppiset osoittimet.
  • Osoittimia voidaan käyttää matriisin ja merkkijonon kanssa, jotta elementtejä voidaan käyttää tehokkaammin.
  • Voimme luoda funktion osoittimia toiminnon dynaamiseksi käynnistämiseksi.
  • Aritmeettiset operaatiot voidaan suorittaa osoittimella, joka tunnetaan osoittimen aritmeettisena.
  • Osoittimet voivat myös osoittaa toiminnon, joka tekee eri toimintojen kutsumisesta helppoa, kun määritetään joukko osoittimia.
  • Kun haluat käsitellä erilaista muuttujan tietotyyppiä, voit käytä typecast void -osoitinta.

Write a Comment

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *