Limba c int. Tipuri de date în C

22.08.2019 Photoshop

În limbajul C, există o distincție între conceptele de „tip de date” și „modificator de tip”. Tipul de date este întreg, iar modificatorul este semnat sau nesemnat. Un întreg cu semn va avea atât valori pozitive, cât și negative, în timp ce un întreg fără semn va avea doar valori pozitive. Există cinci tipuri de bază în limbajul C.

  • char – caracter.
  • O variabilă de tip char are o dimensiune de 1 octet, iar valorile sale sunt de la diferite caractere tabelul de coduri, de exemplu: „f”, „:”, „j” (atunci când sunt scrise în program, sunt cuprinse între ghilimele simple).

  • int – întreg.
  • Dimensiune tip variabil int nu este definit în standardul limbajului C. În majoritatea sistemelor de programare, dimensiunea unei variabile int corespunde mărimii unui întreg cuvânt mașină. De exemplu, în compilatoarele pentru procesoare pe 16 biți, o variabilă int are o dimensiune de 2 octeți. În acest caz, valorile semnate ale acestei variabile se pot situa în intervalul de la -32768 la 32767.

  • plutire – real.
  • Cuvântul cheie float vă permite să definiți variabile de tip real. Valorile lor au o parte fracțională separată de un punct, de exemplu: -5,6, 31,28 etc. Numerele reale pot fi scrise și sub formă de virgulă mobilă, de exemplu: -1.09e+4. Numărul dinaintea simbolului „e” se numește mantisă, iar după „e” se numește exponent. O variabilă de tip float ocupă 32 de biți în memorie. Poate lua valori în intervalul de la 3.4e-38 la 3.4e+38.

  • dublu – dublă precizie reală;
  • Cuvântul cheie dublu vă permite să definiți o variabilă reală cu precizie dublă. Ocupă de două ori mai mult spațiu de memorie decât o variabilă float. O variabilă de tip double poate lua valori în intervalul de la 1.7e-308 la 1.7e+308.

  • nul – fără valoare.
  • Cuvântul cheie void este folosit pentru a neutraliza valoarea unui obiect, de exemplu, pentru a declara o funcție care nu returnează nicio valoare.

Tipuri de variabile:

Programele operează cu diverse date, care pot fi simple sau structurate. Datele simple sunt numere întregi și numere reale, simboluri și pointeri (adresele obiectelor din memorie). Numerele întregi nu au o parte fracțională, dar numerele reale au. Datele structurate sunt matrice și structuri; acestea vor fi discutate mai jos.

O variabilă este o celulă din memoria computerului care are un nume și stochează o anumită valoare. Valoarea unei variabile se poate modifica în timpul execuției programului. Când o nouă valoare este scrisă într-o celulă, cea veche este ștearsă.

Este un stil bun să numești variabilele în mod semnificativ. Numele variabilei poate conține de la unu la 32 de caractere. Este permisă folosirea literelor mici și majuscule, cifre și un caracter de subliniere, care este considerată o literă în C. Primul caracter trebuie să fie o literă. Numele variabilei nu poate corespunde cuvintelor rezervate.

Tastați char

char este cel mai economic tip. Tipul de caracter poate fi semnat sau nesemnat. Notat ca „car semnat” (tip semnat) și „car nesemnat” (tip nesemnat). Tipul semnat poate stoca valori în intervalul -128 până la +127. Unsigned – de la 0 la 255. 1 octet de memorie (8 biți) este alocat pentru o variabilă char.

Cuvintele cheie semnate și nesemnate indică modul în care este interpretat bitul zero al variabilei declarate, adică dacă este specificat cuvânt cheie nesemnat, atunci bitul zero este interpretat ca parte a numărului, în caz contrar bitul zero este interpretat ca semnat.

Tastați int

Valoarea întreagă int poate fi scurtă sau lungă. Cuvântul cheie scurt este plasat după cuvintele cheie semnate sau nesemnate. Deci există tipuri: signed short int, unsigned short int, signed long int, unsigned long int.

O variabilă de tip signed short int (signed short integer) poate lua valori de la -32768 la +32767, unsigned short int (unsigned short integer) - de la 0 la 65535. Fiecare dintre ele are exact doi octeți de memorie (16 biți).

Când se declară o variabilă de tip signed short int, cuvintele cheie signed și short pot fi omise, iar un astfel de tip de variabilă poate fi declarat pur și simplu int. De asemenea, este posibil să declarați acest tip cu un singur cuvânt cheie, scurt.

O variabilă int unsigned short poate fi declarată unsigned int sau unsigned short.

Pentru fiecare valoare semnată long int sau unsigned long int, sunt alocați 4 octeți de memorie (32 de biți). Valorile variabilelor de acest tip pot fi în intervalele de la -2147483648 la 2147483647 și, respectiv, de la 0 la 4294967295.

Există și variabile de tip long long int, pentru care sunt alocați 8 octeți de memorie (64 de biți). Ele pot fi semnate sau nesemnate. Pentru un tip semnat, intervalul de valori este de la -9223372036854775808 la 9223372036854775807, pentru un tip nesemnat - de la 0 la 18446744073709551615. Un tip semnat poate fi, de asemenea, declarat lung de două cuvinte cheie.

Tip Gamă Gama hexagonală Dimensiune
nesemnat char 0 … 255 0x00...0xFF 8 biți
semnat char
sau doar
char
-128 … 127 -0x80…0x7F 8 biți
unsigned short int
sau doar
nesemnat int sau scurt nesemnat
0 … 65535 0x0000…0xFFFF 16 biți
semnat scurt int sau semnat int
sau doar
scurt sau int
-32768 … 32767 0x8000…0x7FFF 16 biți
nesemnat lung int
sau doar
nesemnat lung
0 … 4294967295 0x00000000 … 0xFFFFFFFF 32 de biți
semnat lung
sau doar
lung
-2147483648 … 2147483647 0x80000000 … 0x7FFFFFFF 32 de biți
nesemnat lung lung 0 … 18446744073709551615 0x0000000000000000 … 0xFFFFFFFFFFFFFFFFFF 64 de biți
semnat lung lung
sau doar
lung lung
-9223372036854775808 … 9223372036854775807 0x8000000000000000 … 0x7FFFFFFFFFFFFFFFFF 64 de biți

Declararea variabilelor

Variabilele sunt declarate într-o declarație. O instrucțiune de declarație constă dintr-o specificație de tip și o listă de nume de variabile separate prin virgulă. Trebuie să existe un punct și virgulă la sfârșit.

[modificatoare] type_specifier identificator [, identificator] ...

Modificatori – cuvinte cheie semnate, nesemnate, scurte, lungi.
Un specificator de tip este un cuvânt cheie char sau int care specifică tipul variabilei care este declarată.
Identificatorul este numele variabilei.

Car x;

int a, b, c;

nesemnat long long y;

Când este declarată, o variabilă poate fi inițializată, adică i se poate atribui o valoare inițială.

Int x = 100;

Când este declarată, variabila x va conține imediat numărul 100. Este mai bine să declarați variabilele inițializate pe linii separate. Tipurile de date din C sunt o clasă de date ale căror valori au caracteristici similare. Tipul definește reprezentarea internă a datelor în memorie. Cele mai de bază tipuri de date: logice, întregi, numere în virgulă mobilă, șiruri de caractere, pointeri. Cu tastarea dinamică, o variabilă este asociată cu un tip în momentul inițializării. Se pare că o variabilă din diferite părți ale codului poate avea diferite tipuri. Tastare dinamică sprijin

Java Script

Limbile sunt împărțite în mod neoficial în tastate puternic și tip slab. Tastarea puternică înseamnă că compilatorul va arunca o eroare dacă tipurile așteptate și reale nu se potrivesc.

x = 1 + „2”; //eroare - nu puteți adăuga un simbol la un număr

Un exemplu de tastare slabă.

Verificarea coerenței tipului este efectuată de sistemul de siguranță a tipului. O eroare de tastare apare, de exemplu, atunci când încercați să utilizați un număr ca funcție. Există limbi netipizate. Spre deosebire de cele tastate, acestea vă permit să efectuați orice operație asupra fiecărui obiect.

Cursuri de memorie

Variabilele, indiferent de tipul lor, au propriul domeniu de aplicare și durata de viață.

Cursuri de memorie:

  • auto;
  • static;
  • extern;
  • registru.

Toate variabilele din limbajul C sunt locale în mod implicit. Ele pot fi utilizate numai într-o funcție sau bloc. Când funcția se finalizează, valoarea lor este distrusă.

O variabilă statică este de asemenea locală, dar poate avea o valoare diferită în afara blocului său, iar valoarea este salvată între apelurile de funcție.

Variabila externă este globală. Este disponibil în orice parte a codului și chiar într-un alt fișier.

Specificatorii tipului de date în C pot să nu fie specificați în următoarele cazuri:

  1. Toate variabilele din bloc nu sunt variabile prin urmare, dacă această clasă de memorie particulară este destinată să fie utilizată, atunci specificatorul automat nu este specificat.
  2. Toate funcțiile declarate în afara unui bloc sau funcție sunt globale în mod implicit, deci nu este necesar specificatorul extern.

Pentru a indica tipuri simple specificatorii int, char, float sau double sunt specificati. Modificatorii nesemnat, semnat, scurt, lung, lung lung pot fi înlocuiți cu variabile.

În mod implicit, toate numerele sunt semnate, prin urmare, pot fi doar în intervalul de numere pozitive. Pentru a defini o variabilă de tip char ca semnată, scrieți signed char. Long, long long și short indică cât spațiu de memorie este alocat pentru stocare. Cel mai mare este lung lung, cel mai mic este scurt.

Char este cel mai mic tip de date din C. Numai 1 octet de memorie este alocat pentru stocarea valorilor. O variabilă de tip caracter i se atribuie de obicei caractere, mai rar - numere. Valorile caracterelor sunt cuprinse între ghilimele.

Tipul int stochează numere întregi, dimensiunea acestuia este nedefinită - este nevoie de până la 4 octeți de memorie, în funcție de arhitectura computerului.

O conversie explicită a unei variabile fără semn este specificată după cum urmează:

Cea implicită arată așa:

Float și dublu definiți numerele cu un punct. Numerele flotante sunt reprezentate ca -2,3 sau 3,34. Double este folosit pentru o mai mare precizie - mai multe cifre sunt indicate după separatorul întreg și fracționar. Acest tip ocupă mai mult spațiu de memorie decât float.

Void are o valoare goală. Definește funcții care nu returnează nimic. Acest specificator specifică o valoare goală în argumentele metodei. Pointerii, care pot accepta orice tip de date, sunt, de asemenea, definiți ca nuli.

tip boolean Bool

Folosit în teste de stare și bucle. Are doar două semnificații:

  • adevărat;
  • minciună.

Valorile booleene pot fi convertite într-o valoare int. Adevărat este echivalent cu unu, fals este echivalent cu zero. Conversia tipului este posibilă numai între bool și int, altfel compilatorul va arunca o eroare.

if (x) ( //Eroare: „Nu se poate converti implicit tipul „int” în „bool””

if (x != 0) // Modul C#

Șiruri și matrice

Matricele sunt tipuri complexe de date în C. PL nu funcționează cu șiruri în același mod ca Javascript sau Ruby. În C, toate șirurile sunt matrice de elemente cu o valoare de caracter. Liniile se termină cu un octet nul „

Această foaie de cheat oferă informații despre principalele tipuri de date ale limbajului de programare C++ și caracteristicile implementării acestora. De asemenea, la sfârșitul înregistrării există un tabel cu intervalele de valori ale acestor tipuri.

Conceptul tipului de date

Scopul principal al oricărui program este prelucrarea datelor. Diferite tipuri de date sunt stocate și procesate diferit. În orice limbaj algoritmic Fiecare constantă, variabilă, expresie sau funcție trebuie să aibă un anumit tip.

Tipul de date definește:

  • Reprezentare internă a datelor în memoria computerului;
  • setul de valori pe care cantitățile de acest tip le pot lua;
  • operaţii şi funcţii care pot fi aplicate cantităţilor de acest tip.

Pe baza acestor caracteristici, programatorul selectează tipul fiecărei mărimi utilizate în program pentru a reprezenta obiecte reale. O declarație de tip obligatorie permite compilatorului să verifice validitatea diferitelor constructe de program. Tipul de valoare determină instrucțiunile mașinii care vor fi utilizate pentru prelucrarea datelor.

Toate tipurile de limbaj C++ pot fi împărțite în de bază Şi compozit . Limbajul C++ definește șase principal tipuri de date pentru a reprezenta întreg, real, caracter și valori logice. Pe baza acestor tipuri, programatorul poate introduce o descriere compozit tipuri. Acestea includ matrice, enumerari, functii, structuri, referinte, pointeri, uniuni si clase.

Tipuri de date de bază în C++

Tipurile de date de bază (standard) sunt adesea numite aritmetice deoarece pot fi utilizate în operatii aritmetice. Pentru a descrie principalele tipuri, sunt definite următoarele:

  1. int(int);
  2. char(char);
  3. wchar_t(widechar);
  4. bool(boolean);
  5. float(real);
  6. dublu (dublă precizie reală).

Primele patru tipuri sunt numite întregi ( întreg ), ultimele două - tipuri de virgulă mobilă . Codul pe care compilatorul îl generează pentru procesarea valorilor întregi este diferit de codul pentru valorile în virgulă mobilă.

Sunt patru specificator de tip , clarificând reprezentarea internă și intervalul de valori ale tipurilor standard:

  • scurt (scurt);
  • lung(lung);
  • semnat(semnat);
  • nesemnat.

Tip întreg (int)

Mărimea tipului int nu este definită de standard, dar depinde de computer și de compilator. Pentru un procesor pe 16 biți, 2 octeți sunt alocați pentru valori de acest tip, pentru un procesor pe 32 biți - 4 octeți.

Specificatorul scurt dinaintea numelui tipului indică compilatorului că trebuie alocați 2 octeți pentru număr, indiferent de capacitatea procesorului. Specificatorul lung înseamnă că valoarea întreagă va ocupa 4 octeți. Deci, pe un computer pe 16 biți, echivalentele sunt int și short int, iar pe un computer pe 32 de biți echivalentele sunt int și long int.

Reprezentarea internă valori de tip întreg - întreg în cod binar. Când se utilizează specificatorul cu semn, bitul cel mai semnificativ al numărului este interpretat ca fiind cu semn (0 este un număr pozitiv, 1 este un număr negativ). Specificatorul nesemnat permite reprezentarea numai a numerelor pozitive, deoarece bitul cel mai semnificativ este tratat ca parte a codului numărului. Astfel, intervalul de valori de tip int depinde de specificatori. Intervalele de valori ale valorilor de tip întreg cu diverși specificatori pentru computerele compatibile IBM PC sunt prezentate în tabelul „Intervalele de valori ale tipurilor de date simple” de la sfârșitul intrării.

Implicit este tot tipuri de numere întregi sunt considerate semnate, adică specificatorul semnat poate fi omis.

Constantelor găsite într-un program li se atribuie un tip sau altul în funcție de tipul lor. Dacă din anumite motive programatorul nu este mulțumit de acest tip, el poate indica în mod explicit tipul necesar folosind sufixele L, l (lung) și U, u (fără semn). De exemplu, constanta 32L va fi de tip lung și va ocupa 4 octeți. Puteți utiliza sufixele L și U în același timp, de exemplu, 0x22UL sau 05Lu.

Nota

Tipurile short int, long int, signed int și unsigned int pot fi abreviate la short, long, signed și, respectiv, unsigned.

Tip de caracter (car)

O valoare a tipului de caracter i se alocă un număr de octeți suficient pentru a găzdui orice caracter din setul de caractere pentru a acestui calculator, care a determinat denumirea tipului. De obicei, acesta este de 1 octet. Tipul char, ca și alte tipuri de numere întregi, poate fi semnat sau nesemnat. Valorile semnate pot stoca valori în intervalul -128 la 127. Folosind specificatorul nesemnat, valorile pot varia de la 0 la 255. Acest lucru este suficient pentru a stoca orice caracter din setul de caractere ASCII de 256 de caractere. Valorile tipului char sunt, de asemenea, folosite pentru a stoca numere întregi care nu depășesc limitele intervalelor specificate.

Tip de caracter extins (wchar_t)

Tipul wchar_t este proiectat să funcționeze cu un set de caractere pentru care 1 octet nu este suficient pentru a codifica, de exemplu, Unicode. Mărimea acestui tip este dependentă de implementare; de regulă, corespunde tipului scurt. Constante de șir Tipurile wchar_t sunt scrise cu prefixul L, de exemplu, L „Porți”.

tip boolean (bool)

Cantitati tip boolean nu poate decât să accepte valori adevărateși false, care sunt cuvinte rezervate. Forma internă de reprezentare a valorii false este 0 (zero). Orice altă valoare este interpretată ca adevărată. Când este convertit într-un tip întreg, true are valoarea 1.

Tipuri în virgulă mobilă (float, double și long double)

Standardul C++ definește trei tipuri de date pentru stocarea valorilor reale: float, double și long double.

Tipurile de date în virgulă mobilă sunt stocate diferit în memoria computerului decât tipurile de date întregi. Reprezentarea internă a unui număr real constă din două părți - mantisa și exponentul. Pe computerele compatibile cu IBM PC, valorile float ocupă 4 octeți, dintre care o cifră binară este alocată pentru semnul mantisei, 8 biți pentru exponent și 23 pentru mantise. Mantisa este un număr mai mare de 1,0 dar mai mic de 2,0. Deoarece cifra principală a mantisei este întotdeauna 1, aceasta nu este stocată.

Pentru valorile duble care ocupă 8 octeți, 11 și 52 de biți sunt alocați pentru exponent și respectiv mantisă. Lungimea mantisei determină precizia numărului, iar lungimea exponentului determină intervalul acestuia. După cum puteți vedea din tabelul de la sfârșitul intrării, cu același număr de octeți alocați pentru valorile float și long int, intervalele valorilor lor permise diferă foarte mult datorită formei de reprezentare internă.

Specificatorul lung dinaintea unui nume de tip dublu indică faptul că sunt alocați 10 octeți pentru valoarea acestuia.

Constantele în virgulă mobilă sunt de tip dublu în mod implicit. Puteți specifica în mod explicit tipul unei constante folosind sufixele F, f (float) și L, l (lung). De exemplu, constanta 2E+6L va fi de tip long double, iar constanta 1.82f va fi de tip float.

Pentru a scrie portabil diverse platforme programele nu pot face presupuneri despre dimensiunea unui tip int. Pentru a-l obține, trebuie să utilizați dimensiunea operației, rezultatul căreia este dimensiunea tipului în octeți. De exemplu, pentru sistem de operare MS-DOS sizeof (int) va avea ca rezultat 2, dar pentru Windows 98 sau OS/2 rezultatul va fi 4.

Standardul ANSI nu specifică intervale de valori pentru tipurile de bază sunt definite doar relațiile dintre dimensiunile acestora, de exemplu:

sizeof(float) ≤ slzeof(double) ≤ sizeof(long double)
sizeof(char) ≤ slzeof(short) ≤ sizeof(int) ≤ sizeof(lung)

Nota

Valorile minime și maxime permise pentru tipurile întregi sunt dependente de implementare și sunt date în fișierul antet (), caracteristici ale tipurilor reale - în dosar (), precum și în șablonul de clasă numeric_limits

tip void

Pe lângă cele enumerate, principalele tipuri de limbaj includ tipul de gol, dar setul de valori de acest tip este gol. Este folosit pentru a defini funcții care nu returnează o valoare, pentru a specifica o listă goală de argumente ale funcției, cum ar fi tip de bază pentru pointeri și în operațiunile de turnare a tipului.

Intervalele de valori ale tipurilor de date simple în C++ pentru computerele IBM compatibile cu PC

Î: Ce înseamnă termenul computer compatibil IBM PC?
R: Un computer compatibil IBM PC este un computer care este aproape arhitectural de IBM PC, XT și AT. Calculatoarele IBM compatibile cu PC-uri sunt construite pe microprocesoare compatibile cu Intel 8086 (și, după cum știți, toate cele lansate mai târziu procesoare Intel au plin compatibil cu invers din 8086). De fapt, acestea sunt aproape toate computere moderne.

Au fost introduse diferite tipuri de tipuri întregi și reale, care diferă în intervalul și acuratețea reprezentării datelor, pentru a oferi programatorului posibilitatea de a utiliza cel mai eficient capacitățile echipamentelor specifice, deoarece viteza calculelor și cantitatea de memorie depind de alegerea tipului. Dar un program optimizat pentru orice tip de computer poate să nu fie portabil pe alte platforme, așadar caz general Ar trebui evitate dependențele de caracteristicile specifice ale tipurilor de date.

Tip Gama de valori Dimensiune (octet)
bool adevărat și fals 1
semnat char -128 … 127 1
nesemnat char 0 … 255 1
semnat scurt int -32 768 … 32 767 2
unsigned short int 0 … 65 535 2
semnat lung int -2 147 483 648 … 2 147 483 647 4
nesemnat lung int 0 … 4 294 967 295 4
plutire 3.4e-38 … 3.4e+38 4
dubla 1.7e-308 … 1.7C+308 8
dublu lung 3.4e-4932 … 3.4e+4932 10

Pentru tipurile reale, tabelul arată valorile absolute ale valorilor minime și maxime.

Programatorul spune:

Buna ziua! Am citit articolul tau. Eram foarte trist și amuzant în același timp. Această expresie a ta este deosebit de ucigătoare: „Deoarece o variabilă de tip char este adesea folosită ca matrice, numărul de valori posibile este determinat.” 😆 😆 😆
Nu râd de tine. Crearea unui site web este cu adevărat o ispravă. Vreau doar să vă susțin cu sfaturi și să subliniez câteva greșeli.

1. Valoarea unei variabile de tip char este atribuită după cum urmează:

Iată-l:

Car a = *"A";

Pointerul către matrice este de-adresat și, ca rezultat, valoarea primului element al matricei este returnată, adică. 'O'

2. Resetarea are loc după cum urmează:

Car a = NULL;
char b = ();

//Și așa este șters linia din corpul programului

"" - acest simbol se numește terminator zero. Este plasat la capătul liniei. Tu însuți, fără să știi, ai umplut matricea s1 din articolul tău cu acest simbol. Dar a fost posibil să se atribuie acest simbol numai elementului zero al matricei.

3. Simțiți-vă liber să utilizați terminologia.
Semnul = este o operație de atribuire.
Semnul * este o operație de de-adresare.
Mă refer la acest fragment din articol: „Totul s-a dovedit a fi atât de simplu, trebuia să pui semnul * în fața semnului = și trebuia să declari numărul elementului (zero corespunde primului)”

Nu mă înțelege greșit, articolul nu poate exista în forma sa actuală. Nu fi leneș, rescrie-l.
Ai o mare responsabilitate! Sunt serios. Paginile site-ului dvs. sunt incluse în prima pagină a rezultatelor Yandex. Mulți oameni au început deja să-ți repete greșelile.

Noroc! O poți face!

:
Știu asta de mult timp, este doar dificil să recitesc 200 de articole în mod constant pentru a corecta ceva. Și unele tipuri nepoliticoase scriu în așa fel încât chiar și știind ce este mai bine de corectat, nu sunt deloc dispuși să o corecteze.

Voi fi bucuros să corectez alte erori. corectați eventualele inexactități dacă apar. Apreciez ajutorul tau. mulțumesc, știu asta de mult timp, este doar dificil să recitesc 200 de articole în mod constant pentru a corecta ceva. Și unele tipuri nepoliticoase scriu în așa fel încât chiar și știind ce este mai bine de corectat, nu sunt deloc dispuși să o corecteze.
Cu caracterul tău b = (); Acest lucru nu este deloc zero. Măcar l-aș verifica.
dacă vorbim despre caracterul nul „” ; Știam bine, când am umplut rândul cu ea, că scopul este să arăt o curățenie reală, și nu ceva vizibil pentru ochi, pentru că rândul include gunoi, care uneori îți stau în cale. Ar trebui să fii mai atent cu termenii, „simbol de terminare nul” sau doar „simbol nul”, nu un terminator))) Și simbolul de terminare sună foarte bine.

Voi moderniza articolul, dar nu voi trece la stilul altcuiva. Dacă cred că este mai ușor pentru un începător să înțeleagă în acest fel decât așa cum își dorește, atunci o voi lăsa așa. Nu mă înțelege greșit nici pe mine. Cuvântul „semn” este mult mai ușor de înțeles și de amintit pentru un începător slab decât definiția și numele fiecărui semn. Nu este deloc greșeală în asta, este un semn - un semn. Mai puțin accent pe unul dă mai mult accent pe celălalt.

Voi fi bucuros să corectez alte erori. corectați eventualele inexactități dacă apar. Apreciez ajutorul tau. Multumesc.

Salut din nou!
vreau sa clarific. Termenul „zero-terminator” (terminator din engleză limitator) a fost folosit de profesorul meu de la universitate. Se pare că asta e școala veche!
Cât despre resetarea rândurilor.
char b = (); Aceasta este cu adevărat o resetare. Întreaga matrice este umplută cu zerouri. Dacă nu mă crezi, verifică-l!
Dacă luăm în considerare o linie în sensul său natural, de zi cu zi, atunci o linie „goală” va fi o linie în care nu există un singur caracter. Prin urmare, în 99,9% din cazuri este suficient să puneți un caracter nul la început. În mod obișnuit, un șir este procesat până la primul caracter nul, iar caracterele care vin după el nu mai sunt importante. Am înțeles că ai vrut să resetați linia. Tocmai am decis să ofer o opțiune clasică testată în timp.

:
Când „De obicei, procesarea șirurilor ajunge până la primul caracter nul și ce caractere vin după acesta nu mai este important” - da, șirul este anulat
Dacă luăm în considerare „reducerea la zero reală a tuturor celulelor unui rând (despre care am scris)” - nu, nu zero, și chiar și primul caracter nu este zero. Am bifat varianta asta. MinGW(CodeBlock) - întreaga matrice oferă caracterul „a”
Nu cred că acesta este un motiv de dezbatere.

Tipuri de date. Un program în limbaje procedurale, care include C, este o descriere a operațiilor asupra cantităților diverse tipuri. Un tip definește setul de valori pe care o valoare le poate lua și setul de operațiuni la care poate participa.

În limbajul C, tipurile sunt asociate cu nume (identificatori) de cantități, adică cu variabile. O variabilă în limbajul C este asociată cu o locație de memorie. Tipul de variabilă specifică dimensiunea celulei, modul în care este codificat conținutul acesteia și transformările acceptabile ale valorii acestei variabile. Toate variabilele trebuie declarate înainte de a fi utilizate. Fiecare variabilă trebuie declarată o singură dată.

Descrierea constă dintr-un specificator de tip urmat de o listă de variabile. Variabilele din listă sunt separate prin virgulă. Un punct și virgulă este plasat la sfârșitul descrierii.

Exemple de descrieri:

char a,b; /* Variabilele a și b au tip

char */ intх; /* Variabila x este de tip int

*/ char sym; /" Sunt descrise variabile sym de tip char;

*/ int count.num; /* num și număr de tip int */

Variabilelor li se pot atribui valori inițiale în cadrul declarațiilor lor. Dacă un nume de variabilă este urmat de un semn egal și o constantă, atunci acea constantă servește ca inițializator.

Exemple: char backch = "\0";

Să ne uităm la principalele tipuri din limbajul C.

int - întreg („întreg”). Valorile de acest tip sunt numere întregi dintr-un interval limitat (de obicei de la - 32768 la 32767). Intervalul este determinat de dimensiunea celulei pentru tip și depinde de computerul specific. În plus, există cuvinte funcționale care pot fi folosite cu tipul int: short int („short integer” - „short integer”), unsigned int („unsigned integer” - „unsigned integer”), long int („long integer”) ” ), care reduc sau, dimpotrivă, extind domeniul de reprezentare a numerelor.

char- caracter („personaj”). Valoarea validă pentru acest tip este un caracter (a nu se confunda cu text!). Simbolul este scris cu apostrofe.

Exemple:"x"2"?"

În memoria computerului, un caracter ocupă un octet. De fapt, nu este un simbol care este stocat, ci un număr - codul simbolului (de la 0 la 255). Tabelele speciale de codificare indică toate caracterele valide și codurile lor corespunzătoare.

În limbajul C este permisă utilizarea tipului char ca unul numeric, adică efectuarea de operații cu codul caracterului, folosind specificatorul de tip întreg între paranteze - (int).

float - real (virgula flotantă). Valorile de acest tip sunt numere, dar, spre deosebire de char și int, nu neapărat numere întregi.

12.87 -316.12 -3.345e5 12.345e-15

dublu - numere reale de precizie dublă. Acest tip este similar cu tipul float, dar are o gamă semnificativ mai mare de valori (de exemplu, pentru sistemul de programare Borland-C de la 1.7E-308 la 1.7E+308 în loc de intervalul de la 3.4E-38 la 3.4E+38 pentru tipul float). Cu toate acestea, o creștere a intervalului și acurateței reprezentării numerelor duce la o scădere a vitezei de execuție a programului și la utilizarea irosită a RAM calculator.


Rețineți că nu există niciun tip de șir în această listă. Nu există un tip special în C care să poată fi folosit pentru a descrie șiruri. În schimb, șirurile sunt reprezentate ca o matrice de elemente char. Aceasta înseamnă că caracterele din șir vor fi localizate în celulele de memorie adiacente.

Trebuie remarcat faptul că ultimul element al tabloului este caracterul \0. Acesta este caracterul „null”, iar în limbajul C este folosit pentru a marca sfârșitul unui șir. Caracterul nul nu este numărul 0; nu este tipărit și are numărul 0 în tabelul de coduri ASCII Prezența unui caracter nul înseamnă că numărul de celule din matrice trebuie să fie. De cel puţin, cu unul mai mult decât numărul de caractere care trebuie stocate în memorie.

Să dăm un exemplu de utilizare a șirurilor.

Programul 84

#include principal()

scanf("%s",șir);

printf("%s",șir);

Acest exemplu descrie o matrice de 31 de locații de memorie, dintre care 30 pot conține un singur element char. Se introduce la apelarea funcţiei scanf("%s",string); „&” lipsește când se specifică o matrice de caractere.

Indicatoare. Un pointer este o reprezentare simbolică a adresei unei locații de memorie alocată pentru o variabilă.

De exemplu, &name este un pointer către variabila nume;

Iată și operațiunea de obținere a unei adrese. Adresa reală este un număr, iar reprezentarea simbolică a adresei &nume este o constantă pointer.

Limbajul C are, de asemenea, variabile de tip pointer. La fel cum valoarea unei variabile char este un caracter, iar valoarea unei variabile int este un întreg, valoarea unei variabile pointer este adresa unei anumite valori.

Dacă dăm indicatorului numele ptr, putem scrie o declarație ca aceasta:

ptr = /* atribuie numele adresei variabilei ptr */

Spunem în acest caz că prt este un nume „indicator către”. Diferența dintre cele două notații: ptr și &name este că prt este o variabilă, în timp ce &name este o constantă. Dacă este necesar, puteți face ca variabila ptr să indice un alt obiect:

ptr= /* ptr indică bah, nu nume */

Acum valoarea variabilei prt este adresa variabilei bah. Să presupunem că știm că variabila ptr conține o referință la variabila bah. Apoi, pentru a accesa valoarea acestei variabile, puteți folosi operația de „adresare indirectă” *:

val = *ptr; /* definește valoarea indicată de ptr */ Ultimele două instrucțiuni luate împreună sunt echivalente cu următoarele:

Deci, când în spatele semnului & urmat de numele variabilei, rezultatul operației este adresa variabilei specificate; &nurse dă adresa variabilei asistentă; când un * este urmat de un pointer către o variabilă, rezultatul operației este valoarea plasată în locația de memorie la adresa specificată.

Exemplu: asistenta medicala = 22;

ptr = /* indicator catre asistenta */

Rezultatul este atribuirea valorii 22 variabilei val.

Nu este suficient să spunem că o variabilă este un pointer. În plus, este necesar să se indice la ce tip de variabilă se referă acest indicator. Motivul este că variabilele de diferite tipuri preiau număr diferit locațiile de memorie, în timp ce unele operațiuni legate de pointer necesită cunoașterea cantității de memorie alocată.

Exemple descrierea corectă a pointerilor: int *pi; char *buc;

Specificația de tip specifică tipul variabilei la care se referă pointerul, iar caracterul * identifică variabila în sine ca indicator. Descrierea tipului int *pi; spune că pi este un pointer și că *pi este o valoare int.

Limbajul C oferă posibilitatea de a defini numele tipurilor de date. Puteți atribui un nume oricărui tip de date folosind un typedef și puteți utiliza acest nume mai târziu când descrieți obiecte.

Format: typedef<старый тип> <новый тип> Exemplu: typedef long LARGE; /* definește tipul mare, echivalent tip lung */

Un typedef nu introduce niciun tip nou, ci doar adaugă un nume nou unui deja tip existent. Variabilele declarate în acest fel au exact aceleași proprietăți ca și variabilele declarate explicit. Redenumirea tipurilor este folosită pentru a introduce nume de tip semnificative sau abreviate, ceea ce îmbunătățește înțelegerea programelor și pentru a îmbunătăți portabilitatea programelor (numele aceluiași tip de date pot diferi pe computere diferite).

Operațiuni. Limbajul C se distinge printr-o mare varietate de operații (mai mult de 40). Aici le vom lua în considerare doar pe cele principale, tabelul. 3.3.

Operații aritmetice. Acestea includ

Adăugați(+),

Scădere (binară) (-),

Înmulțirea (*),

Divizia (/),

Restul întregii diviziuni (%),

Scădere (unară) (-) .

Limbajul C are o regulă: dacă dividendul și divizorul sunt de tip int, atunci împărțirea este efectuată în întregime, adică partea fracțională a rezultatului este aruncată.

Ca de obicei, în expresii, operațiile de înmulțire, împărțire și rest sunt efectuate înainte de adunare și scădere. Pentru a schimba ordinea acțiunilor, utilizați paranteze.

Programul 85

#include

5 = -3 + 4 * 5 - 6; printf("%d\n",s);

s = -3 + 4%5 - 6; printf("%d\n",s);

s = -3 * 4% - 6/5; printf("%d\n",s);

s= (7 + 6)%5/2; printf("%d\n",s);

Rezultatul execuției programului: 11 1 0 1

Tabelul 3.3 Precedenta si ordinea operatiilor