0 / 0 / 0
Регистрация: 01.09.2009
Сообщений: 10
|
|
1 | |
bool + int + char в одну переменную09.03.2011, 14:03. Показов 4753. Ответов 17
Метки нет (Все метки)
Подскаждите кто может, как три разных значения, к примеру : "ВАСЯ", 123, false закинуть
в область памяти, на которую указывает указатель. Я делал так: void * p = malloc (sizeof(int)+sizeof(bool)+sizeof(char)); (int*)p=123; p=p+4; (char*)p="Vasya"; p=p+1; (bool*)p=true; Но это, все неработате, может кто-то подскажет как, и какие ошибки? За ранее благодарен за ответ!!!
0
|
09.03.2011, 14:03 | |
Ответы с готовыми решениями:
17
Объединение символьных типов в одну переменную (char) Сложение массива типа char в одну переменную Можно ли преобразать переменную bool в переменную int, short. И переменную string в переменную short, int и Конвертировать массив string в переменную char, либо в переменную int |
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
|
||||||
09.03.2011, 17:39 | 5 | |||||
0
|
09.03.2011, 17:49 | 7 |
Идея понятна, но есть три ошибки:
1. strlen не учитывает хвостовой ноль. 2. Преобразование указателя к int'у - есть плохой способ программирования 3. Строку ты не скопировал, а в память поместил лишь указатель на неё Добавлено через 1 минуту В частных случах такое решение сойдёт (когда ты наверняка знаешь, что есть ограничение на размер строки). Вы пока подумайте, а потом скину одно очень хитрож..ое решение, которое тем не менее является стандартной практикой и видел во многих gnu'тых программах
0
|
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
|
||||||
09.03.2011, 18:16 | 10 | |||||
А какая разница ? указатель к число преобразовывать некрасиво или инт может быть не по размеру к указателю или в другом?
0
|
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
09.03.2011, 18:36 | 11 |
1
|
40 / 38 / 5
Регистрация: 22.01.2011
Сообщений: 670
|
||||||
09.03.2011, 18:46 | 12 | |||||
0
|
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
|
||||||
09.03.2011, 19:36 | 13 | |||||
dimon1984,
0
|
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
|
||||||
09.03.2011, 19:39 | 14 | |||||
а что за способ то ?
0
|
40 / 38 / 5
Регистрация: 22.01.2011
Сообщений: 670
|
|
09.03.2011, 19:39 | 15 |
Вообще да. То я проверял на VS 6 а на VS 2008 тоже 98
0
|
09.03.2011, 19:51 | 16 | |||||
Сообщение было отмечено как решение
Решение
Спрятал под cut, мало ли кому-то интересно покумекать. Объяснять не буду, опять-таки из тех соображений, что полезно будет самому понять
Вотъ
Только автору не рекомендую такое показывать преподавателю, ибо средний тупой преподаватель такое не осилит, а потому не примет
5
|
silent_1991
|
09.03.2011, 19:57
#17
|
Не по теме: Evg, а смысл только в том, чтобы все данные располагались в одной непрерывной области памяти (а не раздельно, в структуре указатель на char, а сама строка отдельным куском)?
0
|
09.03.2011, 20:02 | 18 |
Сообщение было отмечено как решение
Решение
silent_1991, так удобнее. Один malloc вместо двух. Когда у тебя миллион экземпляров, это может оказаться существенным. Плюс отсутствие памяти для хранения указателя. Таким способо можно хранить не только строки, но и любые данные. Это некий вариант реализации экземпляров разной длины но одного и того же типа. Понятно, что такое будет работать только при динамическом выделении памяти
4
|
09.03.2011, 20:02 | |
09.03.2011, 20:02 | |
Помогаю со студенческими работами здесь
18
Как достать из массива char переменные типа double, int, bool Запись двух чисел в одну переменную int Ошибка: cannot convert 'int (*)[50]' to 'int*' for argument '1' to 'void vvod2m(int*, int*, int*, char)'Х2 Надо перевести переменную типа unsigned char* в signed int и обратно Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |