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

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

Войти
Регистрация
Восстановить пароль
 
 
Benzema
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 58
#1

Неясности в теории - C++

11.10.2015, 19:55. Просмотров 1095. Ответов 68
Метки нет (Все метки)

Здравствуйте! Объясните пожалуйста почему в параметрах функции чаще всего используют указатель на массив, а не сам массив, например, void display(int *num).
И еще один вопрос, для чего нужен знак % в данной функции:rand()%1999-999. То, что это функция заполнения рандомными числами,я знаю, но вот для чего там знак % ?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2015, 19:55
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Неясности в теории (C++):

Некоторые неясности с задачей - C++
Имеется задача: вырезано Имеется ее решение: #include <stdio.h> #include <iostream> typedef int *B; int main () ...

Неясности в работе программы - C++
Доброго всем времени суток! :) Уже час пытаюсь понять почему во время исполнения этого кода (в borland, Cи), при вводе цифр ( через...

Некоторые неясности с задачей - C++
Имеется задача: вырезано Имеется ее решение: #include <stdio.h> #include <iostream> int main () { ...

Неясности в реализации метода Адамса - C++
Добрый вечер, форумчане. Я кажется запутался в реализации этого метода. Скажем порядок метода - 4. Есть: // правые части...

Подсчёт выражения. Разработка программы и неясности с функцией pow - C++
Привет, друзья. Задали задачку вот такую: http://habreffect.ru/files/808/bdadc49dd/DSC08284.jpg Собственно говоря программу я написал...

немного теории - C++
Очень долго искал в инете определение методу Итерации чтоб так сказать было разжеванно но не нашел кто поможет дать ему определение на...

68
Redzep
197 / 133 / 54
Регистрация: 21.12.2014
Сообщений: 369
11.10.2015, 19:57 #2
Цитата Сообщение от Benzema Посмотреть сообщение
но вот для чего там знак %
Это остаток от деления. Например 42%5 находит остаток от деления 42 на 5.
0
Rius
Эксперт .NET
4033 / 2699 / 628
Регистрация: 25.05.2015
Сообщений: 8,464
Записей в блоге: 10
Завершенные тесты: 4
11.10.2015, 19:57 #3
Указатель это 32 или 64-битное число всего лишь. Передать его менее накладно, т.е. быстрее, чем все значения массива в 100500 элементов.
% это получение остатка от деления.
0
Benzema
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 58
11.10.2015, 20:00  [ТС] #4
Цитата Сообщение от Redzep Посмотреть сообщение
Это остаток от деления. Например 42%5 находит остаток от деления 42 на 5.
получается я здесь делю 1999 на 999? Прощу прощения, за тупой вопрос, но зачем? именно это я не понимаю
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
11.10.2015, 20:04 #5
Цитата Сообщение от Rius Посмотреть сообщение
Указатель это 32 или 64-битное число всего лишь. Передать его менее накладно, т.е. быстрее, чем все значения массива в 100500 элементов.
Можете привести пример того, как передать все 100500 значений массива в функцию?
2
UnknownSoldier
585 / 106 / 41
Регистрация: 08.04.2015
Сообщений: 238
11.10.2015, 20:05 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
rand() может вернуть большое число, rand()%1999 гарантирует, что результат будет 0..1998. Сооветственно, rand()%1999-999 даст случайное число, которое гарантированно лежит в интервале -1000<x<1000.
0
Rius
Эксперт .NET
4033 / 2699 / 628
Регистрация: 25.05.2015
Сообщений: 8,464
Записей в блоге: 10
Завершенные тесты: 4
11.10.2015, 20:07 #7
castaway, нет, конечно. Это же фантастика.
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
11.10.2015, 20:10 #8
Цитата Сообщение от Benzema Посмотреть сообщение
Здравствуйте! Объясните пожалуйста почему в параметрах функции чаще всего используют указатель на массив, а не сам массив, например, void display(int *num).
Привет.
Обычно вместе с указателем на массив передают и его размер.
Как ты представляешь себе передачу массива (не указателя на него)?

Добавлено через 1 минуту
Цитата Сообщение от Rius Посмотреть сообщение
castaway, нет, конечно. Это же фантастика.
А зачем тогда отвечать в фантастическом (невозможном) стиле?
0
Benzema
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 58
11.10.2015, 20:14  [ТС] #9
Цитата Сообщение от castaway Посмотреть сообщение
Привет.
Обычно вместе с указателем на массив передают и его размер.
Как ты представляешь себе передачу массива (не указателя на него)?

Добавлено через 1 минуту
А зачем тогда отвечать в фантастическом (невозможном) стиле?
Я представляю это как-будто его целиком передают, то есть все значения. Неправильно,я думаю,да?
0
Rius
Эксперт .NET
4033 / 2699 / 628
Регистрация: 25.05.2015
Сообщений: 8,464
Записей в блоге: 10
Завершенные тесты: 4
11.10.2015, 20:16 #10
Цитата Сообщение от Benzema Посмотреть сообщение
Я представляю это как-будто его целиком передают, то есть все значения. Неправильно,я думаю,да?
Нет, лишь адрес начального элемента.
Но запомнить проще, указатель есть указатель.
0
hoggy
6855 / 3053 / 524
Регистрация: 15.11.2014
Сообщений: 6,925
Завершенные тесты: 1
11.10.2015, 20:16 #11
Цитата Сообщение от castaway Посмотреть сообщение
Можете привести пример того, как передать все 100500 значений массива в функцию?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
void view(auto& a)
{
    for(const auto& i: a)
        std::cout<< i<<", ";
    std::cout<<'\n';
}
 
int main()
{
    std::cout << "Hello, world!\n";
    
    const int a[] {1,2,3};
    
    view (a);
}
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
11.10.2015, 20:24 #12
hoggy, тут просто передаётся ссылка на массив.

Добавлено через 1 минуту
Цитата Сообщение от Benzema Посмотреть сообщение
Неправильно,я думаю,да?
Да. Передаётся лишь адрес.
0
Rius
Эксперт .NET
4033 / 2699 / 628
Регистрация: 25.05.2015
Сообщений: 8,464
Записей в блоге: 10
Завершенные тесты: 4
11.10.2015, 20:36 #13
Как же работает это?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "stdafx.h"
#include <stdint.h>
 
typedef struct
{
    int array[100500];
} tSt;
 
void func1(tSt a)
{
    printf("func1 by value \n");
    printf("address of argument: %p\n", &a);
    printf("data[0]: %d\n", a.array[0]);
    printf("data[1]: %d\n", a.array[1]);
 
    a.array[0] = 500;
    a.array[1] = 501;
 
    printf("data[0]: %d\n", a.array[0]);
    printf("data[1]: %d\n", a.array[1]);
}
 
void func2(tSt *a)
{
    printf("func2 by address \n");
    printf("address of argument: %p\n", a);
    printf("data[0]: %d\n", a->array[0]);
    printf("data[1]: %d\n", a->array[1]);
 
    a->array[0] = 600;
    a->array[1] = 601;
 
    printf("data[0]: %d\n", a->array[0]);
    printf("data[1]: %d\n", a->array[1]);
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    tSt data;
    
    for (int i = 0; i < 100500; i++) {
        data.array[i] = i;
    }
 
    printf("Initialized:\n");
    printf("data[0]: %d\n", data.array[0]);
    printf("data[1]: %d\n", data.array[1]);
    printf("address of data: %p\n", &data);
 
    func1(data);
 
    printf("After func1 by value:\n");
    printf("data[0]: %d\n", data.array[0]);
    printf("data[1]: %d\n", data.array[1]);
    printf("address of data: %p\n", &data);
 
    func2(&data);
 
    printf("After func2 by address:\n");
    printf("data[0]: %d\n", data.array[0]);
    printf("data[1]: %d\n", data.array[1]);
    printf("address of data: %p\n", &data);
    return 0;
}
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Initialized:
data[0]: 0
data[1]: 1
address of data: 001FD5F8
func1 by value
address of argument: 0019B2CC
data[0]: 0
data[1]: 1
data[0]: 500
data[1]: 501
After func1 by value:
data[0]: 0
data[1]: 1
address of data: 001FD5F8
func2 by address
address of argument: 001FD5F8
data[0]: 0
data[1]: 1
data[0]: 600
data[1]: 601
After func2 by address:
data[0]: 600
data[1]: 601
address of data: 001FD5F8
0
hoggy
6855 / 3053 / 524
Регистрация: 15.11.2014
Сообщений: 6,925
Завершенные тесты: 1
11.10.2015, 20:41 #14
Цитата Сообщение от castaway Посмотреть сообщение
Обычно вместе с указателем на массив передают и его размер.
Как ты представляешь себе передачу массива (не указателя на него)?
Цитата Сообщение от castaway Посмотреть сообщение
тут просто передаётся ссылка на массив.

не обязательно передавать именно указатель на массив.
и совсем не обязательно передавать размер массива.

(указатель на массив так же, как и ссылка на массив помнит размерности)
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
11.10.2015, 20:55 #15
Цитата Сообщение от Rius Посмотреть сообщение
Как же работает это?
Не переводи тему.
Цитата Сообщение от Rius Посмотреть сообщение
Указатель это 32 или 64-битное число всего лишь. Передать его менее накладно, т.е. быстрее, чем все значения массива в 100500 элементов.
Под передачей 100500 значений массива ты явно подразумеваешь копирование.

Добавлено через 2 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
и совсем не обязательно передавать размер массива.
Разве я где-то упомянул слово "обязательно"?

Цитата Сообщение от hoggy Посмотреть сообщение
не обязательно передавать именно указатель на массив.
Я не говорил что обязательно передавать именно указатель на массив.

Добавлено через 1 минуту
Цитата Сообщение от hoggy Посмотреть сообщение
(указатель на массив так же, как и ссылка на массив помнит размерности)
Интересно. Можно пример с указателем?
0
11.10.2015, 20:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2015, 20:55
Привет! Вот еще темы с ответами:

Вопросы по теории - C++
Здравствуйте, уважаемые участники форума. Начинаю изучать программирование и язык C++ в частности. И сразу же появились вопросы,...

непонятность по теории - C++
что означает статическая переменная? она как локальная только не стирается после окончания функции? или как?

Немного теории - C++
Доброго дня, форумчане! Пишу курсач на тему Системы программирования. Препод сказал, что у меня нет информации о видах систем...

Вопросы по теории C++ - C++
Есть несколько вопросов по теории C++ 1)Что такое функция пользователя 2)Как инициализировать указатель Если можно , то без всяких...


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

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

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