Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712

Массив заданной длины как параметр функции

30.06.2020, 08:28. Показов 5435. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех. Объясните мне, что происходит с выделением памяти при вызове функции foo в следующем коде:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void foo(char arr[5])
{
  for (int i = 0; i < sizeof(arr); i++)
    printf("%c", arr[i]);
  printf("\n");
}
 
int main()
{
  char* str = "hello";
  foo(str);
}
Очевидно, указателю arr будет присвоено значение указателя str. Но непонятно что происходит в части размерности 5 массива arr.
Пока я понимаю это так, что при вызове функции foo на стеке будет выделено 5 байт памяти, но указателю arr не будет присвоен адрес начала этой памяти, а будет присвоен адрес указателя str. 5 байт будут зря выделены?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.06.2020, 08:28
Ответы с готовыми решениями:

Как создать массив заданной длины динамически
Есть длина будущего массива. Как его создать? Пробовал через malloc но что не получалось char buff; int i, j, c; for (i = 0;...

массив как параметр функции
Число элементов среди Х1..Хн, которые не превосходят максимального значения элемента У1..Ун и в тоже время не меньше его минимального...

Массив, как параметр функции
Здравствуйте, не могу понять, в чем ошибка. Написать функцию, которая вычисляет для двумерного массива с переменной длинной строк сумму...

23
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
30.06.2020, 11:46
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от d7d1cd Посмотреть сообщение
С ним связано еще 2 типа
Вообще типов, аналогично связанных с int, великое множество. В C++ есть тип "ссылка на тип int" int &pi; по смыслу сходная с разыменованным указателем, есть модификаторы константности или блокировки оптимизаций(например const int * pi - неконстантный указатель на константу, т.е. которому можно присваивать адреса то одной, то другой константы и/или переменной), есть указатели на указатели int **p; и т.д.
0
30.06.2020, 11:56  [ТС]

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
выдумывание собственной классификации в отношении возможностей ЯП
:-[ просто не знаю как это назвать. Вот и выдумываю, пытаясь донести свою мысль.

0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
30.06.2020, 12:03
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
А, например, структурный тип struct { int a; } с ним не связан?
Не сказал бы что связан, т.к. поле типа не является модифицированным различными способами типом, а является одним из его составляющих (причём часто - одним из многих полей)

Добавлено через 5 минут
А так вообще в С++ есть возможности в том числе для операций над типами, если на момент создания логики класса или функции типы переменных не определены.Таких операций довольно много - https://en.cppreference.com/w/cpp/types
1
02.09.2020, 21:00

Не по теме:

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Нет.

Разве что в современном С есть лишь малоизвестная фича: объявление

C
1
void foo(char arr[static 5])
по-прежнему объявляет arr как указатель char * (и никакого выделения памяти под массив не делается). Но при этом данное объявление говорит компилятору, что он может смело полагать, что arr указывает на начало массива из как минимум 5 элементов.
В современном С, кстати, есть еще одна необычная возможность, в которой размер массива в объявлении параметра функции "не совсем игнорируется". Это использование выражений с побочными эффектами при объявлении VLA в списке параметров

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int n = 0;
 
void foo(int a[++n])
{
  printf("%d\n", n);
}
 
int main()
{
  foo(0);
  foo(0);
  foo(0);
}
http://coliru.stacked-crooked.... a5ad4305f1

На тип параметра это не влияет, т.е. параметр является обычным указателем, но тем не менее при каждом вызове foo значение n будет увеличиваться. Это уже, конечно, полнейший сюр, но тем не менее такая особенность в С есть.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.09.2020, 21:00

Массив байтов как параметр функции
Всем здравствуйте. Пусть msg: array of byte; Мне нужно передать его в функцию как параметр. На C++ это выглядит так: unsigned...

Динамический массив как параметр функции
Господа, прошу Вас помочь с функцией. Собственно говоря, необходимо с помощью функции заполнить несколько двумерный динамических...

Двухмерный массив как параметр функции
Всем здравствуйте. Для одномерного массива - параметра функции всё компилируется. Вот пример: struct ArchRecordStruct { UINT...

Двумерный массив как параметр функции
Есть такая функция, загружающая элементы из бинарного файла в массив bool m1: void loadfromfile(char *filename, int col, int row) {...

Массив как входной параметр функции
Привет всем С помощью формул массива высчитываю данных, затем их хочу соединить. Возник вопрос, как передать этот массив в свою функцию ...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru