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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
#1

Что происходит с массивом после передачи в функцию? - C++

21.05.2010, 13:06. Просмотров 494. Ответов 5
Метки нет (Все метки)

Привет!
почему после передачи массива в метод, sizeof() выдает другой результат??

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
 
void test(int arr[]);
 
int main()
{
    int arr[] = {3, 5, 7, 4, 1, 5, 7, 4, 1};
    cout << sizeof(arr)<<endl;  // --> 36
    test(arr);
}
 
 void test(int arr[])
 { 
     cout << sizeof(arr)<<endl;  // --> 4                  
 }
спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2010, 13:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что происходит с массивом после передачи в функцию? (C++):

Доступ по индексу после передачи дека в функцию - C++
Здравствуйте. template&lt;class P&gt; void Input(deque&lt;P&gt; *MyD, P s) { int i = 0; int size = MyD-&gt;size(); for (P y = s;i &lt;...

Почему после передачи в функцию массива, выводятся случайные числа, если использовать *(uk++) во второй раз? - C++
Интересует такой вопрос: почему после передачи в функцию массива выводятся случайные числа из оперативной памяти, если использовать *(uk++)...

Динамический массив структур (не происходит передачи и некорректно удаляется) - C++
Всем привет! Решил изучить динамический массив через realloc... Написал простенькую программу... Но при ее выполнении не...

Способы передачи параметров в функцию - C++
#include&lt;iostream&gt; using namespace std; void swap1(int x, int y) { int z; z=x; x=y; y=z; ...

Ошибка передачи параметра в функцию - C++
#include &quot;stdafx.h&quot; #include &quot;War.h&quot; int _tmain(int argc, _TCHAR* argv) { War warv(&quot;Battle&quot;); ...

Особенности передачи объекта в функцию - C++
Вечер добрый, форум! Вопрос такой. Предположим есть класс class1, и есть class2, который является наследником класса class1. Имеется...

5
kazak
3038 / 2359 / 157
Регистрация: 11.03.2009
Сообщений: 5,405
Завершенные тесты: 1
21.05.2010, 13:38 #2
Потому что в функцию передается указатель на массив.
1
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
21.05.2010, 19:10 #3
Особенности языка
В контексте функции main() компилятор знает что arr[] - это константный массив заданного размера

В контексте функции test компилятор знает что arr[] - это указатель на массив целых чисел (размер массива неизвестен)
скорее всего sizeof(arr) == sizeof(int*)
1
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,389
21.05.2010, 19:27 #4
odip, да оно не "скорее всего", а именно так оно и есть. Ты абсолютно прав в разъяснении.
1
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
21.05.2010, 20:28  [ТС] #5
Aaaa.. получается это просто размер индекса.. наверно)
спасибо, прояснили!

после сишарп как то непривычно.
0
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
22.05.2010, 12:14 #6
Так если взять какой-нибудь std::vector в C++, то все будет как в C#
0
22.05.2010, 12:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2010, 12:14
Привет! Вот еще темы с ответами:

В этой части кода происходит объявление функций? Что такое void? Что в скобках? - C++
В этой части кода происходит объявление функций? Что такое void? Что в скобках? void get(float **mas, int N, int M); void...

Размер массива при передачи в функцию - C++
День добрый, подскажите столкнулся с такой проблемой: void masssize (char mass) { int size = sizeof(mass)/sizeof(mass); cout...

Отличие способов передачи массива в функцию - C++
В чем отличие: double sum(double x) от double sum(double *x) ?

Правильный способ передачи вектора в функцию - C++
Доброго времени суток, начав изучать язык столкнулся с данным вопросом (название темы), сделал это так: #include &quot;iostream&quot; #include...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru