Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
VoltDeMar
16 / 16 / 0
Регистрация: 05.06.2012
Сообщений: 1,017
#1

Как происходит присвоение значения переменной? - C++

03.09.2015, 09:58. Просмотров 1308. Ответов 5
Метки нет (Все метки)

Здравствуйте.
Какие способы присвоения значения существуют?
Расскажите пожалуйста, как присваиваются значения при присвоении из других переменных?
Можно ли выполнять присвоение с использованием указателей, что происходит в этом случае?
Спрашиваю о механизмах работы сего (хотя демонстрация методов желательна).
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.09.2015, 09:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как происходит присвоение значения переменной? (C++):

Присвоение значения переменной в классе - C++
возможно ли присвоение значения переменной в классе? class xxx { public : void rrr(); public : int x=5; // ??? };

Присвоение значения переменной из функции - C++
Доброго времени суток!!! Например в Pascal можно так: procedure myinc(var a:integer); begin a:=a+1; end; begin ...

Присвоение переменной значения из текстового файла - C++
Доброго дня. есть текстовый файл, подскажите, пожалуйста, как присвоить переменной значение, которое находится в первой строчке 13-е по...

Присвоение переменной а значения случайного числа (random) - C++
Здравствуйте. Задача написать программу для проверки знания таблиц умножения. Rand-омом виводятся два числа (a,b) на консоль. Как присвоить...

Присвоение значения переменной класса через конструктор - C++
#include <iostream> using namespace std; class Help { int userID; public: Help(int id) {int userID = id;} ~Help()...

Как происходит возврат значения по ссылке? - C++
Добрый вечер, распишите пожалуйста детально про то, как происходит возврат значения по ссылке. Можно вот на этом примере: alpha&...

5
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
03.09.2015, 10:56 #2
Цитата Сообщение от VoltDeMar Посмотреть сообщение
Какие способы присвоения значения существуют?
А какие ты уже знаешь? Пытался ли сам что-то сделать? Если пытался - покажи примеры. Если попыток не было, то лучше обратиться к литературе, чтобы уяснить базовые понятия языка. А то можно опуститься и до вопросов вида "Как целочисленной переменной присвоить значение 42".
1
VoltDeMar
16 / 16 / 0
Регистрация: 05.06.2012
Сообщений: 1,017
03.09.2015, 11:25  [ТС] #3
Цитата Сообщение от Tulosba Посмотреть сообщение
А какие ты уже знаешь?
Присвоение константного значения, присвоение значения переменной.
Вот так попробовал сделать:
C++
1
LPCSTR а = "dddd";
Что происходит в этом случае? Создается переменная, указатель на которую передается в a?

Меня интересует каким методом это происходит? Например при присвоении значения массиву данные переписываются посимвольно (побайтово или как то ещё) или для этой переменной переопределяется область в памяти? Я хочу получить понимание которым руководствоваться при написании программы, потому что сейчас когда имею переменные wchar_t* и std::wstring, например, в программе, то не понимаю что сделать чтобы присвоить одно другому,потому что не знаю как это будет происходить. Метод запоминания функций и методов не подходит для моей дырявой памяти, мне нужно понять принцип.
0
zer0mail
2368 / 1998 / 199
Регистрация: 03.07.2012
Сообщений: 7,184
Записей в блоге: 1
03.09.2015, 12:33 #4
Вообще-то есть отладчики, которые показывают ассемблерный код и там видна вся кухня.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
03.09.2015, 12:40 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Для начала, стоит заметить, что LPCSTR это не стандартный тип, а по сути синоним, который вводит MS:
C++
1
typedef const char* LPCSTR;
Т.о. твой пример можно рассматривать как:
C++
1
const char* a = "dddd";
В данном случае "dddd" является строковым литералом, где он будет храниться определяется реализацией, но главное, что его нельзя пытаться изменять после компиляции программы:
2.14.5/12 The effect of attempting to modify a string literal is undefined.
Цитата Сообщение от VoltDeMar Посмотреть сообщение
Создается переменная, указатель на которую передается в a?
Создается указатель a и ему присваивается адрес, по которому расположен строковый литерал "dddd".
Цитата Сообщение от VoltDeMar Посмотреть сообщение
Например при присвоении значения массиву данные переписываются посимвольно
Надо различать присваивание и инициализацию.
C++
1
2
3
int a[] = {1, 2, 3}; // массив можно инициализировать
int b[] = {4, 5, 6}; 
a = b; // но нельзя присвоить ему другой массив
В общем случае чтобы переписать значения элементов одного массива в другой нужно выполнить поэлементное присваивание.
Цитата Сообщение от VoltDeMar Посмотреть сообщение
переменные wchar_t* и std::wstring
Надо всего лишь понимать различия в типах:
wchar_t* - обычный указатель на широкий символ. У такого указателя нет ни конструктора, ни деструктора, ни других функций-членов. Что будет расположено по этому указателю зависит от соглашений. Это может быть как единичный широкий символ, так и строка (последовательность символов, заканчивающаяся нулевым символом L'\0');
std::wstring - полноценный объект, со всеми вытекающими (наличие функций-членов, данных и т.д.)
Цитата Сообщение от VoltDeMar Посмотреть сообщение
чтобы присвоить одно другому
Для инициализации объекта std::wstring (как и любого другого сложного объекта) нужно использовать конструктор. Например:
C++
1
2
const wchar_t* wp = L"some string";
std::wstring ws(wp); // вызов конструктора
Чтобы из строки std::wstring получить указатель (const wchar_t*) достаточно вызвать функцию-член c_str():
C++
1
const wchar_t* wp2 = ws.c_str();
Но здесь стоит понимать, что c_str() возвращает указатель не некое внутреннее представление строки в объекте, т.к. явно писать данные по такому указателю нельзя (собственно const об этом говорит), а так же нельзя использовать эти данные после любого модифицирующего метода из std::wstring:
C++
1
2
3
4
const wchar_t* wp2 = ws.c_str();
// пока ещё можно использовать wp2 на чтение
ws.resize(100);
// здесь уже нельзя использовать wp2 т.к. ws изменился
Цитата Сообщение от VoltDeMar Посмотреть сообщение
Метод запоминания функций и методов не подходит для моей дырявой памяти, мне нужно понять принцип.
Это для всех так
0
VoltDeMar
16 / 16 / 0
Регистрация: 05.06.2012
Сообщений: 1,017
03.09.2015, 15:18  [ТС] #6
Цитата Сообщение от zer0mail Посмотреть сообщение
Вообще-то есть отладчики, которые показывают ассемблерный код и там видна вся кухня.
Изучение ещё одного языка наверное не самый быстрый способ понять такие вещи)
0
03.09.2015, 15:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2015, 15:18
Привет! Вот еще темы с ответами:

Странное присвоение переменной - C++
часть кода struct verh // Вершины Машины { double x,y; }; struct cube // Структура машины {

Симметрия и присвоение переменной в матрице - C++
Доброго времени суток. Задание состоит в том, чтобы транспонированная матрица сравнивалась с полученной, после ввода. После сравнения,...

Присвоение переменной поля указателя на объект - C++
Инициализация: Dragons* dragon; for (int i = 0; i <= 99; i++) { dragon = new Dragons(random(50), random(40), 3,8); } ...

присвоение ASCII кода последних 2 символов слова переменной - C++
здравствуйте! мне нужна помощь! мне нужно решить следующую задачу: "найти сумму АSCII кодов последних двух символов слова (если слово...


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

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

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