Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
12 / 7 / 3
Регистрация: 06.01.2013
Сообщений: 127
1

Выделение памяти под переменную в структуре

23.04.2013, 09:47. Просмотров 932. Ответов 15
Метки нет (Все метки)

Например есть структура
C++
1
2
3
4
5
struct StrDL
{
    char Str;
    char Simv;
};
и как выделить память под Str ? Типа этого например char *Str=(char*)malloc(1);

Добавлено через 9 минут
C++
1
2
3
4
5
6
7
8
9
10
11
struct StrDL
{
    char *Str;
    char Simv;
};
 
int main()
{
StrDL Stroka;
 
Stroka.Str=(char*)malloc(1);
Так правильно?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2013, 09:47
Ответы с готовыми решениями:

Выделение памяти под динамический двумерный массив в структуре
Доброво времени суток, дорогие товарищи-кодеры! Работав проектом, столкнулся с тем что удобно...

Выделение памяти только под часть полей в классе/структуре
Кто знает, возможен ли в C++ такой класс/структура, который может быть или одного вида с одним...

Выделение памяти под переменную
Драсте, уважаемые. Мне надо выделить переменную на 25мег, чтоб в ней хранить все просчёты...

Выделение памяти в структуре
Можно ли сделать так? struct str_p { double *rezult = new double ; } Программа в принципе...

15
Модератор
Эксперт С++
9679 / 8278 / 5050
Регистрация: 18.12.2011
Сообщений: 22,119
23.04.2013, 09:55 2
C++
1
Stroka.Str=(char*)malloc(1*sizeof(char));
Но, поскольку мы в разделе С++, лучше
C++
1
Stroka.Str=new char;
1
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.04.2013, 10:33 3
Выделять 1 символ через new это, конечно, круто
И, кстати, sizeof(char) по определению 1.
1
Модератор
Эксперт С++
9679 / 8278 / 5050
Регистрация: 18.12.2011
Сообщений: 22,119
23.04.2013, 10:46 4
Цитата Сообщение от Tulosba Посмотреть сообщение
sizeof(char) по определению 1.
С чего бы это? Для уникода - 2.
1
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.04.2013, 10:59 5
zss, стандарт С++ 5.3.3
sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1.
2
Модератор
Эксперт С++
9679 / 8278 / 5050
Регистрация: 18.12.2011
Сообщений: 22,119
23.04.2013, 11:09 6
Решил проверить про 2 байта и получил интересный результат:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
int main()
{
    wchar_t x=L'Ы';
    std::cout<<x<<endl;
    int i=sizeof(x);
    std::cout<<i<<endl;
    return 0;
}
Вместо буквы Ы выводится
1067
1
1346 / 986 / 312
Регистрация: 28.07.2012
Сообщений: 2,743
23.04.2013, 11:13 7
zss, двухбайтные символы выводятся при помощи wcout. А для русских еще нужно локаль сменить.
2
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.04.2013, 11:14 8
zss, так wchar_t это же не char. И cout это не wcout.
1
Модератор
Эксперт С++
9679 / 8278 / 5050
Регистрация: 18.12.2011
Сообщений: 22,119
23.04.2013, 11:27 9
М-дааа! Не все ладно в Датском королевстве!
Можно было бы перегрузить cout для wchar_t,
да и устанавливать локаль в уникоде - нонсенс.
1
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.04.2013, 11:44 10
Цитата Сообщение от zss Посмотреть сообщение
Можно было бы перегрузить cout для wchar_t,
Так cout это тип basic_ostream<char>, а wcout - basic_ostream<wchar_t>
2
Модератор
Эксперт по электронике
8228 / 6095 / 814
Регистрация: 14.02.2011
Сообщений: 21,158
23.04.2013, 11:48 11
Цитата Сообщение от Wladius Посмотреть сообщение
C++
1
2
3
4
5
struct StrDL
{
    char Str;
    char Simv;
};
сам разницу видишь??

Цитата Сообщение от Wladius Посмотреть сообщение
C++
1
2
3
4
5
struct StrDL
{
    char *Str;
    char Simv;
};
в первом случае char во втором указатель
для первого случая нельзя
для второго выделяй сколько душе угодно
не забудь потом удалить
1
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.04.2013, 12:05 12
Цитата Сообщение от ValeryS Посмотреть сообщение
сам разницу видишь??
Я думаю, в первом сообщении ТС просто ошибся, поэтому и внес исправления в код.

Добавлено через 14 минут
Интересно, ТС все сообщения в ветке плюсует?
1
12 / 7 / 3
Регистрация: 06.01.2013
Сообщений: 127
23.04.2013, 12:07  [ТС] 13
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Tulosba Посмотреть сообщение
Интересно, ТС все сообщения в ветке плюсует?
Абсолютно все, люди же старались писали, надо и плюсануть)
4
Модератор
Эксперт С++
9679 / 8278 / 5050
Регистрация: 18.12.2011
Сообщений: 22,119
23.04.2013, 20:08 14
Цитата Сообщение от Tulosba Посмотреть сообщение
Так cout это тип basic_ostream<char>, а wcout - basic_ostream<wchar_t>
Так это в тот же огород: перегрузка для разных параметров существует,
а для разных возвращаемых значений - нет!
1
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.04.2013, 20:21 15
Цитата Сообщение от zss Посмотреть сообщение
Так это в тот же огород: перегрузка для разных параметров существует,
а для разных возвращаемых значений - нет!
Потому что возвращаемый параметр может быть проигнорирован.
1
Заблокирован
Автор FAQ
30.04.2013, 14:29 16
Wladius, с учётом твоих тем на форуме м.б ты такое хотел
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct
{
    const char * sDIGIT;
    char  chDIGIT;
}DIGITS [] = 
{   
    {"ZERO", '0'},
    {"ONE" , '1'},
    {"TWO" , '2'},
    {"THREE",'3'}, 
    {"FOUR", '4'},
    {"FIVE", '5'},
    {"SIX",  '6'},
    {"SEVEN",'7'}, 
    {"EIGHT",'8'}, 
    {"NINE", '9'},
    {NULL ,  '\0'}
};
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.04.2013, 14:29

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Выделение памяти под массивы
int **mas1 = new int*; for (int e = 0; e &lt; q; e++) mas1 = new int; int **mas2 = new...

Выделение памяти под wchar_t
вот такой код: char *str=new char; strcpy(str,&quot;stroka&quot;); int l=strlen(str); wchar_t *wstr=new...

Выделение памяти под массив
в массиве данных хранять в последовательных ячейках памяти В программе, выделенна память под...

Выделение памяти под строку
Никак не могу понять, в чем проблема, подскажите пожалуйста. Предположим, инициализирую...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.