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

Нюансы использования оператора sizeof() - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ 1.функции пользователя http://www.cyberforum.ru/cpp-beginners/thread388356.html
1.. Дано натуральное число N. Получить все такие натуральные K, что N делится на K2 и не делится на K3.
C++ Аналогичная конструкция в stl Здрасте всем,предо мной стоит делема. в С++ я выделяю память так char **mas=new char*; как будет выглядеть аналогичная по работе конструкция в STL ,а именно я имею ввиду векторы. и да как мне сделать этот вектор динамичным ? Сорри уже разобрался)) вот так нада vector<char*> mas; спасибо) http://www.cyberforum.ru/cpp-beginners/thread388343.html
C++ найти производную функции f(x)=sinx(cosx-x^3) по определению (delta=0.1)в точках из интервала [0,5) с шагом 0,5.
найти производную функции f(x)=sinx(cosx-x^3) по определению (delta=0.1)в точках из интервала Добавлено через 25 секунд на с++
Вывод на консоль русских символов C++
wcout должна вроде это делать , но все равно чето не получается. Как граммотно это делается?
C++ В строке между словами вставить вместо пробела запятую и пробел http://www.cyberforum.ru/cpp-beginners/thread388336.html
как в строке между словами вставить вместо пробела запятую и пробел? Добавлено через 2 минуты на с++.
C++ Помогите пожалуйста "error C2143:" и "error C4430:" Здравствуйте. помогите пожалуйста понять как правильно сделать оъявление вот такой штуки... class bst{ struct et{ et* l; et* r; K k; T v; et(et&); подробнее

Показать сообщение отдельно
Сыроежка
Заблокирован
21.11.2011, 23:51     Нюансы использования оператора sizeof()
Цитата Сообщение от thick_int Посмотреть сообщение
Нет ну так то понятно. Однако и здесь не все так просто.
Например, вот такой вариант
C++
1
2
3
4
char str[5] = "Test";
cout << str << endl;
str[0] = 'B';
cout << str << endl;
проходит

И такой вариант
C++
1
2
3
4
char str[] = "Test";
cout << str << endl;
str[0] = 'B';
cout << str << endl;
тоже проходит

А вот такой уже не проходит
C++
1
2
3
4
char* str = "Test";
cout << str << endl;
str[0] = 'B'; //Здесь ошибка
cout << str << endl;
То есть в данном случае традиционная ассоциация между указателями и массивами слегка подпорчена.
Указатель - это не массив. Просто имеется неявное преобразование в выражениях или при передачи массива в качестве аргумента функции имени массива в указатель на его первый элемент.

В последнем вашем примере, вы объявляете указатель, который указывает на строковый литерал "Test". В С++ строковый литерал имеет тип const char[], поэтому и указатель правильно объявлять как

C++
1
const char *str = "Test";
Просто для совместимости с кодом языка С стандарт С++ разрешает не писать квалификатор const для таких указателей, хотя предупреждает, что в будущем такое послабление может быть отменено стандартом С++, а потому такое объявление указателя без const компиляторами будет рассматриваться как ошибка.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru