Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Где найти компиляторы C++ для IDE NetBeans и как их установить? http://www.cyberforum.ru/cpp-beginners/thread1523886.html
Только установил IDE. Попытался создать проект на C++, а пишет, что нет компиляторов. Где найти компиляторы C++ для IDE NetBeans и как их установить?
C++ Не работает функция error() Выполняю код программки из учебника в Visual C++ 2010: #include "../../../std_lib_facilities.h" int area(int length, int width) { if (length<=0 || width <=0) return -1; return length*width; } http://www.cyberforum.ru/cpp-beginners/thread1523879.html
Архаичный сбор отчетов, поиск способа и языка C++
Здравствуйте. Прошу у вас консультативной помощи. Есть задача: Создать форму для ввода однотипных данных. После заполнения формы, нажав на что-то типа "сохранить", должен создаваться *.txt, с данными из формы, (можно в одну строку). Данную форму, должны заполнять разные пользователи, в разных местах, на разных компах. Разные версии Windows, Разные версии Office, отсутствие/присутствие...
Либы готовых хуков для перехвата клавиатуры C++
Добрый день. Ищу либу, которая позволила бы быстро прописывать глобальные хуки клавишь как сигналы в Qt или просто что бы возвращала true-false по нажатию определенной кнопки. Пишу ПОшку, которая предназначена для RDP сеансов Windows, которая запускает ту или иную программу (Но я писал для 1С). (Ссылка на гит). Очень примитивная. Читает из текстового файлика путь к программе и параметры...
C++ Добавить маркер (альфа, бетта, гамма.) в конец каждой строки http://www.cyberforum.ru/cpp-beginners/thread1523848.html
Нужно добавить маркер в конце каждой строки. Маркер это символ альфа, бетта, гамма... Каким образом это сделать? #include <stdafx.h> #include <iostream> #include <locale> #include <fstream> #include <time.h> using namespace std;
C++ Расчет BMI Наверно глупый вопрос или код. Второй день учу C++ Стивен Прата. И застрял на упражнение. Вроде все хорошо только BMI не правильно выводит #include <iostream> #include <cmath> using namespace std; int main () { //cout.setf(ios_base::fixed, ios_base::floatfield); float rostfyt, vesfyt; cout << "Ведите рост в футах: "; cin >> rostfyt; подробнее

Показать сообщение отдельно
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
03.09.2015, 12:40
Для начала, стоит заметить, что 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 Посмотреть сообщение
Метод запоминания функций и методов не подходит для моей дырявой памяти, мне нужно понять принцип.
Это для всех так
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru