BG Development


Страници: (5) [1] 2 3 ... последна »  ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Въпрос за намиране на размер с sizeof
georgib1
Публикувано на: 06-01-2017, 22:01
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 881
Регистриран на: 26.09.16



Здрасти, за въпроса ми е нужна basic математика, но нещо не мога да си го обясня.Като искаме да намерим колко елемента има в масив, използваме sizeof(масива) и намираме размера на всички елементи в него.Защо после трябва да разделим на размера на някой елемент, за да получим колко елемента има?
PMEmail Poster
Top
georgib1
Публикувано на: 06-01-2017, 22:11
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 881
Регистриран на: 26.09.16



Сетих се:
Имаш 30 бонбона, а един човек е взел 2.Разделяш 30 на 2 и намираш, че 15 човека трябва да вземат по 2, за да свършат бонбоните.Така и с масива - елементите там са еднакви и като разделим общата памет на паметта, която е заета от един елемент намираме колко елемента са взели такава памет, за да се запълни масива.
PMEmail Poster
Top
gat3way
Публикувано на: 06-01-2017, 22:28
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1433
Регистриран на: 22.06.12



Бах, аз през целия си съзнателен живот не помня някога да съм викал sizeof() срещу масив.
PMEmail Poster
Top
georgib1
Публикувано на: 06-01-2017, 22:32
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 881
Регистриран на: 26.09.16



QUOTE (gat3way @ 06-01-2017, 22:28)
Бах, аз през целия си съзнателен живот не помня някога да съм викал sizeof() срещу масив.

E що бе?Например:
CODE

int array[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,5};
int size = sizeof(array) / sizeof(array[0];
cout <<size;

Ефективно си е icon_lol.gif.Не вярвам да крие бъгове.

Това мнение е било редактирано от georgib1 на 06-01-2017, 22:32
PMEmail Poster
Top
Bender
Публикувано на: 06-01-2017, 22:35
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 4564
Регистриран на: 19.06.14



сигурен ли си че това работи ? масива е просто указател, и sizeof няма как да знае дали сочи към масив от 1000 обекта или е просто указател към един обект

ЕДИТ: за масиви заделени при компилация ок, но я пробвай с масив заделен с malloc

Това мнение е било редактирано от Bender на 06-01-2017, 22:37


--------------------
Живота е спагети, кода за да работи добре трябва да го наподобява - Дон Реба
...
Живеем в греховни времена, какво очакваш богоугоден и благочестив код ли? - Дон Реба
...
много положителна енергия черпя от вас двамата,единият комунистически девствен,другият яко яхнал асемблерните розови понита - saruman
...
Рано или късно усерите на Виндофс разбират че стоят от неправилната страна на хуя. - ici
PM
Top
georgib1
Публикувано на: 06-01-2017, 22:38
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 881
Регистриран на: 26.09.16



QUOTE (Bender @ 06-01-2017, 22:35)
сигурен ли си че това работи ? масива е просто указател, и sizeof няма как да знае дали сочи към масив от 1000 обекта или е просто указател към един обект

ЕДИТ: за масиви заделени при компилация ок, но я пробвай с масив заделен с malloc

за malloc не знам, защото даже не знам за кво се ползва.Иначе ти като си заделиш някаква памет за този масив защо да не работи?Нали тази памет не се променя през времето на компилация?
PMEmail Poster
Top
Bender
Публикувано на: 06-01-2017, 22:42
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 4564
Регистриран на: 19.06.14



QUOTE (georgib1 @ 06-01-2017, 23:38)
QUOTE (Bender @ 06-01-2017, 22:35)
сигурен ли си че това работи ? масива е просто указател, и sizeof няма как да знае дали сочи към масив от 1000 обекта или е просто указател към един обект

ЕДИТ: за масиви заделени при компилация ок, но я пробвай с масив заделен с malloc

за malloc не знам, защото даже не знам за кво се ползва.Иначе ти като си заделиш някаква памет за този масив защо да не работи?Нали тази памет не се променя през времето на компилация?

да де ама ако става нещо такова:
CODE

fun main(){
   byte[] array = {1,2,3,4,5}
   print(sizeof(array))

   byte *pointer = &array[0];
   printsize(pointer);

   pointer = malloc(1000);
   printsize(pointer);
}

fun printsize (void *pointer){
   print(sizeof(pointer));
}



Я го напиши на цпп и го пробвай


--------------------
Живота е спагети, кода за да работи добре трябва да го наподобява - Дон Реба
...
Живеем в греховни времена, какво очакваш богоугоден и благочестив код ли? - Дон Реба
...
много положителна енергия черпя от вас двамата,единият комунистически девствен,другият яко яхнал асемблерните розови понита - saruman
...
Рано или късно усерите на Виндофс разбират че стоят от неправилната страна на хуя. - ici
PM
Top
georgib1
Публикувано на: 06-01-2017, 22:51
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 881
Регистриран на: 26.09.16



QUOTE (Bender @ 06-01-2017, 22:42)
QUOTE (georgib1 @ 06-01-2017, 23:38)
QUOTE (Bender @ 06-01-2017, 22:35)
сигурен ли си че това работи ? масива е просто указател, и sizeof няма как да знае дали сочи към масив от 1000 обекта или е просто указател към един обект

ЕДИТ: за масиви заделени при компилация ок, но я пробвай с масив заделен с malloc

за malloc не знам, защото даже не знам за кво се ползва.Иначе ти като си заделиш някаква памет за този масив защо да не работи?Нали тази памет не се променя през времето на компилация?

да де ама ако става нещо такова:
CODE

fun main(){
   byte[] array = {1,2,3,4,5}
   print(sizeof(array))

   byte *pointer = &array[0];
   printsize(pointer);

   pointer = malloc(1000);
   printsize(pointer);
}

fun printsize (void *pointer){
   print(sizeof(pointer));
}



Я го напиши на цпп и го пробвай

Ако разбера как бачка malloc, ще опитам icon_lol.gif.Чета тука, че на тва чудо му подаваш някаква памет и то я разпределя и връща пойнтър към нея.Как точно я разпределя?Какво прави?
PMEmail Poster
Top
Bender
Публикувано на: 06-01-2017, 22:51
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 4564
Регистриран на: 19.06.14



CODE
// Example program
#include <iostream>
#include <string>

void printsize(void *pointer){
   std::cout << "\nSizeOf " << sizeof(pointer);
}

int main(){
   int array[] = {1,2,3,4,5};
   std::cout << "SIZEOF " << sizeof(array);
   printsize(array);
   printsize(&array[0]);
   printsize(malloc(100));
}


QUOTE
SIZEOF 20
SizeOf 8
SizeOf 8
SizeOf 8



--------------------
Живота е спагети, кода за да работи добре трябва да го наподобява - Дон Реба
...
Живеем в греховни времена, какво очакваш богоугоден и благочестив код ли? - Дон Реба
...
много положителна енергия черпя от вас двамата,единият комунистически девствен,другият яко яхнал асемблерните розови понита - saruman
...
Рано или късно усерите на Виндофс разбират че стоят от неправилната страна на хуя. - ici
PM
Top
Bender
Публикувано на: 06-01-2017, 22:53
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 4564
Регистриран на: 19.06.14



QUOTE
Какво прави?

Заделя памет динамично. Тоест вмест да пишеш int abc[] = {1,2,3}; пишеш int *array = malloc(3*sizeof(int)); и ще ти задели памет за 3 инта. После я освобождаваш с free(array); като свършиш да я ползваш


--------------------
Живота е спагети, кода за да работи добре трябва да го наподобява - Дон Реба
...
Живеем в греховни времена, какво очакваш богоугоден и благочестив код ли? - Дон Реба
...
много положителна енергия черпя от вас двамата,единият комунистически девствен,другият яко яхнал асемблерните розови понита - saruman
...
Рано или късно усерите на Виндофс разбират че стоят от неправилната страна на хуя. - ici
PM
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (5) [1] 2 3 ... последна » Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2015 | BG Development | All Rights Reserved
RSS 2.0