Rodyklės yra gyvybiškai svarbios daugeliui C programų, tačiau jas gali būti sunku suprasti. Peržiūrėkite jų sintaksę ir jų veikimą naudodami praktinius pavyzdžius.

Rodyklės yra esminis C programavimo aspektas, kurį turėsite gerai suprasti, kad galėtumėte efektyviai naudoti kalbą. Jie padeda efektyviai valdyti atmintį, perduoti duomenis pagal nuorodas, tvarkyti masyvus ir eilutes ir dar daugiau. Tačiau juos reikia naudoti atsargiai, kad būtų išvengta klaidų.

Ištirkite C rodyklių detales – nuo ​​atminties ir adresų supratimo iki žymeklio aritmetikos įsisavinimo.

Atmintis ir adresai

Atmintis – dažnai naudojama kaip trumpinys RAM (laisvosios kreipties atmintis)– yra kompiuterio saugojimo vieta, kurioje yra duomenys ir instrukcijos, kurių reikia programai. Tai yra jūsų programos darbo vieta. Mažiausias atminties vienetas paprastai yra baitas, lygus aštuoniems bitams.

Kiekviena atminties vieta turi unikalų adresą ir gali saugoti skirtingą duomenų kiekį, priklausomai nuo kompiuterio. Kai deklaruojate kintamąjį C, jūs netiesiogiai priskiriate jam atminties vietą duomenims saugoti. Pagalvokite apie tai kaip apie namą, kurio unikalus adresas, kurį galite naudoti norėdami jį rasti.

instagram viewer

Įsivaizduokite savo kompiuterio atmintį kaip saugojimo langelių seką, kurių kiekvienoje yra duomenų baitas. Tarkime, yra du kintamieji, x ir y, C programoje:

int x = 5;
int y = 10;

Atmintyje tai gali atrodyti taip:

Adresas

Duomenys

1000

5

1004

10

Čia šie kintamieji saugomi atskirose atminties vietose. Duomenys, kurie x reiškia, kad jis yra atminties adresu 1000, o yduomenys užima atminties adresą 1004.

Atminties ir adresų supratimas yra labai svarbus dirbant su rodyklėmis, nes jie yra kintamieji, kurie saugo atminties adresus. Jie leidžia pasiekti ir valdyti duomenis, saugomus konkrečioje atminties vietoje.

Rodyklės deklaravimas ir inicijavimas C

Prieš keisdami duomenis naudodami C žymeklius, turite juos deklaruoti ir inicijuoti.

Deklaracija

Norėdami paskelbti žymeklį, nurodykite duomenų tipą, į kurį jis nukreipia, po to pažymėkite žvaigždutę (*), o tada – žymeklio pavadinimą. Pavyzdžiui:

int *ptr;

Čia int *ptr skelbia rodyklė pavadinta ptr kurioje galima išsaugoti sveikojo skaičiaus atminties adresą.

Inicijavimas

Po deklaravimo turėtumėte jį inicijuoti naudodami atminties adresą, į kurį jis nurodys. Galite inicijuoti taip:

int x = 5;
int *ptr = &x;

Šioje deklaracijoje & operatorius gauna x kintamojo adresą. Kodas iš esmės sako: „ptr yra kintamasis, jis saugo sveikojo skaičiaus reikšmės vietą atmintyje ir ta vieta yra visur, kur šiuo metu nurodo x“.

Dabar ptr turi sveikojo skaičiaus kintamojo adresą x. Pavyzdžiui:

Kintamasis

Adresas

Vertė

x

1000

5

ptr

1000

Rodyklės C ne tik saugo kintamojo adresą, bet ir turi savo unikalų adresą kompiuterio atmintyje.

Nuorodų panaikinimas

C žymeklio nuorodos panaikinimas reiškia prieigą prie reikšmės, saugomos žymeklio nurodytu atminties adresu.

Tarkime, kad turite rodyklę, int *ptr, kuris nurodo sveikąjį kintamąjį, o šio kintamojo reikšmė yra 10. Norėdami pasiekti reikšmę per žymeklį, naudokite žvaigždutę (*) operatorius:

int x = 10;

int *ptr = &x; // ptr points to the address of x

int value = *ptr; // Dereferencing ptr to get the value

Šiame pavyzdyje naudojama ptr kintamąjį, kad gautumėte reikšmę atminties adresu, į kurį jis nurodo. Taigi, vertė dabar turi reikšmę 10, kuri yra turinys x.

Rodyklės aritmetika

Rodyklės aritmetika yra galinga C funkcija, ypač naudinga dirbant su masyvais ir eilutėmis (kurios yra simbolių masyvai). Tai leidžia atlikti aritmetines operacijas su rodyklėmis, kad galėtumėte judėti atmintyje.

Štai pavyzdys, rodantis, kaip galite jį naudoti.

Pradėkite deklaruodami sveikųjų skaičių masyvą:

int numbers[] = {10, 20, 30};

Paskelbkite žymeklį į int ir priskirkite jam skaičių masyvo atminties vietą:

int *ptr = numbers;

Čia nereikia naudoti operatoriaus „&“, nes skaičiai jau netiesiogiai yra žymeklio tipas.

Ptr kintamasis dabar nurodo pirmąjį masyvo elementą:

printf("%d\n", *ptr); // 10

Galite perkelti žymeklį į trečiąjį masyvo elementą padidindami jį 2:

ptr += 2;
printf("%d\n", *ptr); // 30

Galite perkelti žymeklį atgal, atimdami iš jo:

ptr--;
printf("%d\n", *ptr); ;// 20

Žymeklio aritmetika ypač naudinga naršant masyvuose ir dirbant su dinamine atminties paskirstymu.

Rodyklės ir funkcijos C

Jei tu suprasti, kaip funkcijos veikia programuojant C, tada jau sėkmingai naudojate funkcijų rodykles. Štai keletas būdų, kaip galite juos naudoti.

Funkcijų rodyklės

Galite deklaruoti ir naudoti funkcijų rodykles norėdami dinamiškai naudoti funkcijas, kaip ir bet kurią kitą reikšmę. Tai ypač naudinga skambinant atgal ir atliekant dinamines funkcijas.

int (*operation)(int, int); // Declare a function pointer
operation = add; // Pointer to an add function
int result = operation(5, 3); // Call the function through the pointer

Šis kodas deklaruoja funkcijos žymeklį pavadinimu operacija kuri gali nurodyti funkciją, kuri paima du sveikuosius skaičius ir grąžina vieną. Jis priskiria (žymiklį) papildyti funkcija operacija. Tada jis naudoja operacijos kintamąjį netiesiogiai iškviesti pridėti (5, 3).

Einant pro nuorodą

Rodyklės leidžia perduoti argumentus, nurodant funkcijas, kad galėtumėte keisti pradinius funkcijos duomenis. Tai labai svarbu funkcijoms, kurioms reikia pakeisti kintamojo reikšmę už jų taikymo srities ribų.

voidmodifyValue(int *x){
*x = 42; // Modifies the value of x in the calling code
}

The modifikuotiValue funkcija pakeičia bet kokio argumento, kurį jai pateikia iškvietimo kodas, reikšmę, nustatydama ją į 42.

Dinaminis atminties paskirstymas

Funkcijos gali grąžinti rodykles į dinamiškai paskirstytą atmintį. Tai įprasta, kai reikia sukurti ir grąžinti neapribotas duomenų struktūras, pvz., masyvus ar susietus sąrašus. Jums reikės gerai suvokti kamino ir krūvos atmintį juo naudotis.

int *createArray(intsize){
int *arr = (int *)malloc(size * sizeof(int));
return arr;
}

Šis kodas apibrėžia funkciją, sukurti Array, tam reikia sveikojo skaičiaus, dydis, kaip įvestis. Funkcijos viduje ji dinamiškai paskirsto atmintį nurodyto dydžio sveikųjų skaičių masyvei naudodama malloc. Inicijuojus masyvą, jis grąžina žymeklį į šį naujai sukurtą masyvą.

Bendras naudojimas

Rodyklės yra būtinos C kalboje dėl kelių priežasčių, ir tai yra kas atskirti C nuo kitų programavimo kalbų, tokių kaip Python. Štai keletas bendrų naudojimo būdų:

  • Dinaminis atminties paskirstymas
  • Masyvo manipuliavimas
  • Einant pro nuorodą
  • Duomenų struktūros
  • Resursu valdymas

Suprasdami šiuos įprastus rodyklių naudojimo būdus, galite pagerinti jūsų C programavimo įgūdžius. Praktikuokite kai kuriuos iš jų, kad geriau suprastumėte nuorodas.

Praktikuokite rodyklių naudojimą programuojant C

C programavimo rodyklių įsisavinimas yra vertingas įgūdis, leidžiantis efektyviai valdyti atmintį, manipuliuoti duomenimis ir atlikti pažangias operacijas. Praktika ir įgūdžiai naudojant nuorodas labai pagerins jūsų gebėjimą kurti patikimas ir efektyviai išteklius naudojančias C programas.