de-vraag
  • Klausimai
  • Žymos
  • Vartotojai
Pranešimai
Apdovanojimai
Registracija
Užsiregistravę gausite pranešimus apie atsakymus ir komentarus į savo klausimus.
Prisijungti
Jei jau turite paskyrą, prisijunkite ir patikrinkite naujus pranešimus.
Už pridėtus klausimus, atsakymus ir komentarus bus skiriami apdovanojimai.
Daugiau
Šaltinis
Redaguoti
Mark Harrison
Mark Harrison
Question

Kaip C kalba nustatyti masyvo dydį?

Kaip C kalba nustatyti masyvo dydį?

T. y. kiek elementų gali talpinti masyvas?

894 2008-09-01T06:49:22+00:00 3
Peter Mortensen
Peter Mortensen
Redaguotas klausimas popietr vasaris 2013 в 2:16
Programavimas
arrays
c
memory
Šis klausimas turi 1 atsakymas atsakymų anglų kalba, norėdami juos perskaityti prisijunkite prie savo paskyros.
Solution / Answer
Mark Harrison
Mark Harrison
priešpietr rugsėjis 2008 в 6:49
2008-09-01T06:49:44+00:00
Daugiau
Šaltinis
Redaguoti
#8434591

Vykdomoji santrauka:

int a[17];
size_t n = sizeof(a)/sizeof(a[0]);

Pilnas atsakymas:

Norėdami nustatyti masyvo dydį baitais, galite naudoti sizeof operatorių:

int a[17];
size_t n = sizeof(a);

Mano kompiuteryje intų ilgis yra 4 baitai, taigi n yra 68.

Norėdami nustatyti masyvo elementų skaičių, galime padalyti bendrą masyvo dydį iš masyvo elemento dydžio. Tai galite padaryti su tipu, pvz:

int a[17];
size_t n = sizeof(a) / sizeof(int);

ir gautumėte tinkamą atsakymą (68 / 4 = 17), bet jei tipas a pasikeistų, turėtumėte nemalonią klaidą, jei pamirštumėte pakeisti ir sizeof(int).

Taigi pageidaujamas daliklis yra sizeof(a[0]), t. y. nulinis masyvo elementas.

int a[17];
size_t n = sizeof(a) / sizeof(a[0]);

Dar vienas privalumas yra tas, kad dabar galite lengvai parametrizuoti masyvo pavadinimą makrokomandoje ir gauti:

#define NELEMS(x)  (sizeof(x) / sizeof((x)[0]))

int a[17];
size_t n = NELEMS(a);
einpoklum  - reinstate Monica
einpoklum - reinstate Monica
Redaguotas atsakymas priešpietr kovas 2019 в 9:34
1133
0
Magnus Hoff
Magnus Hoff
priešpietr rugsėjis 2008 в 6:55
2008-09-01T06:55:23+00:00
Daugiau
Šaltinis
Redaguoti
#8434689

Verta paminėti, kad sizeof nepadeda, kai susiduriama su masyvo verte, kuri sumažėjo iki rodyklės: nors ji rodo į masyvo pradžią, kompiliatoriui tai yra tas pats, kas rodyklė į vieną to masyvo elementą. Rodyklė neprisimena "nieko daugiau apie masyvą, kuris buvo naudojamas jai inicializuoti.

int a[10];
int* p = a;

assert(sizeof(a) / sizeof(a[0]) == 10);
assert(sizeof(p) == sizeof(int*));
assert(sizeof(*p) == sizeof(int));
Magnus Hoff
Magnus Hoff
Redaguotas atsakymas priešpietr spalis 2014 в 6:44
126
0
Ted Percival
Ted Percival
priešpietr rugsėjis 2008 в 6:50
2008-09-01T06:50:31+00:00
Daugiau
Šaltinis
Redaguoti
#8434688
sizeof(array) / sizeof(array[0])
12
0
Pridėti klausimą
Kategorijos
Visi
Technologijos
Kultūra / poilsis
Gyvenimas / Menai
Mokslas
Profesionalus
Verslas
Vartotojai
Visi
Naujas
Populiarus
1
Виталий Теслюк
Registruota prieš 6 valandas
2
shokir qochqorov
Registruota prieš 9 valandas
3
Roxana Elizabeth CASTILLO Avalos
Registruota prieš 1 savaitę
4
Hideo Nakagawa
Registruota prieš 1 savaitę
5
Sergiy Tytarenko
Registruota prieš 1 savaitę
BG
DA
DE
EL
ES
FR
ID
IT
JA
KO
LT
LV
NL
PL
PT
RU
TR
ZH
© de-vraag 2022
Šaltinis
stackoverflow.com
pagal licenciją cc by-sa 3.0 nurodant autorystę