|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|||||||||||
Что правильнее передавать в функцию,ожидающую char*16.03.2023, 13:48. Показов 1200. Ответов 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
|
|
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
||
| 16.03.2023, 21:52 | ||
|
Алгоритм здесь прост: Компилятор выдал вам диагностическое сообщение? Да, выдал. Это диагностическое сообщение требуется стандартом языка? Да, это constraint violation, то есть диагностическое сообщение требуется. Значит всё: код НЕ компилируется. А "warning" у вас там или "error" написано - это не имеет никакого значения. Это лишь частные особенности диагностики в вашем компиляторе. --- Это во-первых. А во-вторых, наличие этого "warning" разве не дало вам однозначный ответ на ваш исходный вопрос? Почему вопрос "как правильно" все равно возник?
0
|
||
|
И тут вот те нате
322 / 209 / 117
Регистрация: 12.07.2016
Сообщений: 555
|
|
| 16.03.2023, 23:09 | |
|
0
|
|
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
|
| 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
|
|
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
||||||||
| 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
|
|
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
||
| 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
|
|
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
|||||
| 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,858
|
||||||||
| 17.03.2023, 03:13 | ||||||||
0
|
||||||||
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
||||||||||||||
| 17.03.2023, 05:13 | ||||||||||||||
& к массиву, а не к указателю. То есть о char a[100]. Ваш пример с char *a к рассматриваемой теме никакого отношения даже отдаленно не имеет. К чему это здесь?p = (char *) &a;---
0
|
||||||||||||||
| 17.03.2023, 05:13 | |
|
Как правильнее вызывать метод(стоит ли указывать, каким параметрам передавать значения)? Что лучше передавать из функции в функцию — массив переменных или переменные по одной?
Как правильнее проинициализировать char's, чтобы не было мусора?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Remote Connection Manager
DevAlt 21.06.2026
Написал для себя небольшую прилагу:
https:/ / github. com/ altbodhi/ ReConMan
По итогу пришел к мысли, что DU не дружат с существующими технологиями.
От сериализации до отображения в реляционную. . .
|
Администрация Хабра удаляет новые энрегоэфективные алгоритмы, которые не западной школы кода, и вовсе никак не сгенерировавны.
Hrethgir 20.06.2026
Делается это, как замечено, при правках - при объявлении концептуальных отличий в алгоримах. Делается это, по линейке событий - после дополнения публикации основными отличиями от основных западных. . .
|
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
|
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2.
Задача: контроль уникальности строк в. . .
|
|
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
|
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
|
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
|
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
|