|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|||||||||||
Что правильнее передавать в функцию,ожидающую char*16.03.2023, 13:48. Показов 1211. Ответов 33
Метки нет (Все метки)
Всех приветствую. Есть функция,которая ожидает на входе увидеть char*,чтобы наполнить его данными. Как правильно передать туда этот массив,т.к компилятор не ругается не в первом,не во втором случае. Но как это будет правильнее с точки зрения экономии памяти и почему. Первый вариант:
0
|
|||||||||||
| 16.03.2023, 13:48 | |
|
Ответы с готовыми решениями:
33
Как правильно передавать char* в функцию? Что значит Handle hf? Что в эту функцию нужно передавать
|
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|
| 16.03.2023, 21:27 [ТС] | |
|
1
|
|
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,312
|
||
| 16.03.2023, 21:52 | ||
|
Алгоритм здесь прост: Компилятор выдал вам диагностическое сообщение? Да, выдал. Это диагностическое сообщение требуется стандартом языка? Да, это constraint violation, то есть диагностическое сообщение требуется. Значит всё: код НЕ компилируется. А "warning" у вас там или "error" написано - это не имеет никакого значения. Это лишь частные особенности диагностики в вашем компиляторе. --- Это во-первых. А во-вторых, наличие этого "warning" разве не дало вам однозначный ответ на ваш исходный вопрос? Почему вопрос "как правильно" все равно возник?
0
|
||
|
И тут вот те нате
322 / 209 / 117
Регистрация: 12.07.2016
Сообщений: 555
|
|
| 16.03.2023, 23:09 | |
|
0
|
|
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,312
|
|
| 16.03.2023, 23:24 | |
|
0
|
|
|
И тут вот те нате
322 / 209 / 117
Регистрация: 12.07.2016
Сообщений: 555
|
|
| 16.03.2023, 23:55 | |
|
TheCalligrapher, понял, показалось
0
|
|
|
Отпрыск ChatGPT
266 / 31 / 4
Регистрация: 18.06.2019
Сообщений: 155
|
|
| 17.03.2023, 00:03 | |
|
0
|
|
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,312
|
||||||||
| 17.03.2023, 00:23 | ||||||||
|
Constraints раздела "6.5.2.2 Function calls" говорят, что для функций, объявленных с прототипом, проверка соответствия типов аргументов типам параметров делается по правилам присваивания. Constraints раздела "6.5.16.1 Simple assignment" говорят
char и char [100] не являются compatible.В данном случае типы операндов не удовлетворяют ни одному из этих пунктов. Constaints присваивания нарушены. Поэтому требуется диагностическое сообщение. Другим словами такой вызов функции в С не допускается по той же причине, по которой не допускается присваивание
1
|
||||||||
|
Отпрыск ChatGPT
266 / 31 / 4
Регистрация: 18.06.2019
Сообщений: 155
|
|
| 17.03.2023, 01:08 | |
|
TheCalligrapher, ааа… Так брать адрес уже адреса на начало массива и присваивать его в
char * уже бессмыслица какая-то. Всё, понял о чём речь. Такое недопустимо без явного каста.
0
|
|
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,312
|
||
| 17.03.2023, 01:12 | ||
&a - это никакой не "адрес уже адреса". С чего бы это вдруг? &a - это просто адрес всего массива.Между p = a и p = &a нет никакой физической разницы. Но второй вариант нарушает формальные правила типизации языка.
0
|
||
|
Отпрыск ChatGPT
266 / 31 / 4
Регистрация: 18.06.2019
Сообщений: 155
|
|
| 17.03.2023, 01:55 | |
|
TheCalligrapher, ну тк
a это адрес на начало массива, который здесь же. (void*)a == (void*)&a[0] Если сделаем *a получим первый элемент. Если делаем &a, чего мы хотим добиться оператором взятия адреса массива и присваивания его в char*? char * = char(*)[]? Это просто не логично, поэтому правильно, что есть такие формальные правила типизации.
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 17.03.2023, 02:19 | |
|
0
|
|
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,312
|
|||||
| 17.03.2023, 02:46 | |||||
a - это сам массив. Объект типа char [100] в памяти. Блок памяти размеров в 100 байт.& является исключением. В случае &a "array to pointer conversion" НЕ применяется. Поэтому в &a нет никакого "адреса уже адреса"."Array to pointer conversion" дает указатель на нулевой элемент массива. А &a дает указатель на начало всего массива целиком. Эти адреса численно, разумеется, совпадают, т.е. соответствуют одной и той же точке в памяти. Они различаются лишь типами. "Array to pointer conversion" дает char * (как и &a[0]), то есть указатель на элемент массива. А &a дает char (*)[100], то есть указатель на весь массив.p = a и p = (char *) &a делают одно и то же. Но смысла в таком подавлении типизации нет. Зачем?См. также Распространенные ошибки
0
|
|||||
|
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,882
|
||||||||
| 17.03.2023, 03:13 | ||||||||
0
|
||||||||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,312
|
||||||||||||||
| 17.03.2023, 05:13 | ||||||||||||||
& к массиву, а не к указателю. То есть о char a[100]. Ваш пример с char *a к рассматриваемой теме никакого отношения даже отдаленно не имеет. К чему это здесь?p = (char *) &a;---
0
|
||||||||||||||
| 17.03.2023, 05:13 | |
|
Как правильнее вызывать метод(стоит ли указывать, каким параметрам передавать значения)? Что лучше передавать из функции в функцию — массив переменных или переменные по одной?
Как правильнее проинициализировать char's, чтобы не было мусора?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302
Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
|