Форум программистов, компьютерный форум CyberForum.ru

Определение размера массива + sizeof - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 188, средняя оценка - 4.61
Diaskop
Сообщений: n/a
25.01.2012, 16:52     Определение размера массива + sizeof #1
Массив из 6 чисел: sizeof возвращает 24 байта. Тот же массив вызван функцией возвращает только 4 байта.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
using namespace std;
void Qut1(int[]);
 
int main()
{
    int Array[]={10,8,6,4,2,0};
    cout<<"Sizeof_Array= "<<sizeof Array<<endl;  //ответ 24
    Qut1(Array);
    
    return 0;
}
 
void Qut1(int arr[])
{
 
    cout<<'\n';
 
    cout <<"Sizeof_Array_in_Function= "<< sizeof arr<<'\n'<<endl;// ответ 4
}
Ниже пример из С.В.Глушаков «Программирование С++» стр. 129. Программа должна выводить все числа массива, но "sizeof(arr)" функции Qut1 равно 4, и естественно выводит только 4 числа. Ошибка в книге или я ...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
using namespace std;
void Qut1(int[]);
 
int main()
{
    int Array[]={10,8,6,4,2,0};
 
    Qut1(Array);
   
    return 0;
}
 
void Qut1(int arr[])
{
    for (int i=0; i<sizeof(arr); i++)
    cout <<arr[i]<<" "<<endl;
 
        
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
25.01.2012, 16:56     Определение размера массива + sizeof #2
Diaskop, в функцию передается указатель.

Не по теме:

книгу с таким примером выброси



Передавай в качестве второго параметра длину массива
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
25.01.2012, 17:25     Определение размера массива + sizeof #3
Массив нельзя передать в функцию.
C++
1
void Qut1( int arr[] )
это одно и тоже, что и
C++
1
void Qut1( int arr * )
sizeof( любых указателей ) = 4
-=ЮрА=-
Заблокирован
Автор FAQ
25.01.2012, 18:01     Определение размера массива + sizeof #4
Diaskop, всё дело в том какой массив статический или динамический.
char StatArr[N];
sizeof(StatArr) - выведет N*sizeof(char) байт
Если массив динамический sizeof всегда возвращает размер указателя в 4 байта...
char * DinArr = new char[N];
sizeof(DinArr) - вернёт четыре байта...
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
25.01.2012, 23:56     Определение размера массива + sizeof #5
-=ЮрА=-, дело тут не в этом, а в том, что, как и сказали выше, массив передаётся в функцию. В функции он перестаёт (для этой самой функции) быть полноценным статическим массивом (для которого компилятор хранит такую информацию, как размер занимаемой им памяти), а становится обычным указателем.

Цитата Сообщение от Diaskop Посмотреть сообщение
Ниже пример из С.В.Глушаков
О боже, это в книге написано??
-=ЮрА=-
26.01.2012, 10:20
  #6

Не по теме:

silent_1991, что ты хотел сказать я так и не понял...
Что в функцию массивы передаются по указателю, ну да открыл для меня страшную тайну

silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
26.01.2012, 11:00     Определение размера массива + sizeof #7
-=ЮрА=-, вы свой предыдущий комментарий не к месту написали. В данном случае без разницы, статический массив изначально или динамический. Проблема в том, что размер пытаются вычислить в функции, в которой что статический массив, что динамический - суть указатель.
-=ЮрА=-
26.01.2012, 11:12
  #8

Не по теме:

silent_1991, лучше расскажу один анекдот
У программиста спросили:
- Каким будет наступающий новый год?
- Целым, положительным...

Попробуй подходить к постам непрямолинейно, думаю научишся улавливать мысли других людей...

silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
26.01.2012, 11:16     Определение размера массива + sizeof #9
-=ЮрА=-,

Не по теме:

Не учите меня жить! (c) "Двенадцать стульев"


Был задан чёткий вопрос: почему в функции, в которой статический массив создан, sizeof возвращает одно, а в функции, куда он передаётся как параметр, другое. Напрашивается чёткий ответ: ибо указатель. Ваш непрямолинейный динамический массив только собьёт человека с толку.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2012, 11:25     Определение размера массива + sizeof
Еще ссылки по теме:

C++ Определение размера массива
Определение размера динамического массива строк C++
Определение размера массива в функции C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
26.01.2012, 11:25     Определение размера массива + sizeof
  #10

Не по теме:

silent_1991, на счёт прямолинейности вниму!
Впреть ещё конкретней буду излагать мысли, а на счёт этого

Цитата Сообщение от silent_1991 Посмотреть сообщение
Не по теме: Не учите меня жить! (c) "Двенадцать стульев"
- аналогично..!Иногда твои язвы кроме желания что-то нехорошее сделать ничего не вызывают! Кодить не только ты умеешь и книги читать тоже. Будь пожалуйста коректеней в своих уколах особенно в мой адрес...

Yandex
Объявления
26.01.2012, 11:25     Определение размера массива + sizeof
Ответ Создать тему
Опции темы

Текущее время: 23:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru