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

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

30.06.2020, 08:28. Показов 5722. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru