Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
1

Когда переменная будет const?

04.02.2011, 22:01. Просмотров 1249. Ответов 21
Метки нет (Все метки)

Всем привет, вот меня заинтересовал вопрос, я объявил char test = "t";
и компилятор говорит, что это const, когда переменная при таком объявлении будет являться не char test, а const char test? Заранее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2011, 22:01
Ответы с готовыми решениями:

const переменная
Вопрос по коду ниже. Насколько я знаю const переменная, это переменная по имени...

Хочу разобраться с прототипами функций, const но переменная изменяется
Оригиналы хэш функций тут - назовем это ENG статьёй Я так подозреваю написано...

int const * const foo(const int* param) const - разъясните значение квалификаторов
int const * const foo(const int* param) const ...

Переменная double отображается неправильно когда ее значение = 0
Написал код, все работает, но при определенных условиях переменная double со...

В программе имеется следующий фрагмент: const char a='*'; char ch; как объявится указатель-переменная
В программе имеется следующий фрагмент: const char a='*'; char ch; как...

21
st_dent
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
04.02.2011, 22:05 2
Цитата Сообщение от BTR Посмотреть сообщение
я объявил char test = "t";
так нельзя, можно
так
C++
1
char *test = "t";
или
так
C++
1
char test = 't';

и компилятор говорит, что это const
правильно говорит
1
panicwassano
594 / 562 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
04.02.2011, 22:05 3
потому что ты объявил строку, а не символ. Либо объяви указатель
1
asics
Freelance
Эксперт С++
2857 / 1792 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
04.02.2011, 22:05 4
BTR, Перемнную типа char записывают в одинарные кавычки, а вот строковый литерал - в двойные, то есть так:
C
1
char *test = "t";
1
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
04.02.2011, 22:05  [ТС] 5
если я непонятно изложил вопрос, то скажите... (если что извиняюсь)
0
st_dent
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
04.02.2011, 22:06 6
Цитата Сообщение от BTR Посмотреть сообщение
если я непонятно изложил вопрос, то скажите... (если что извиняюсь)
да, а в чём, собственно, вопрос?
1
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
04.02.2011, 22:10  [ТС] 7
вот теперь понял, благо от РНР опыт есть, всем большое спасибо

Добавлено через 1 минуту
в подождите, еще сейчас вопрос задам

Добавлено через 2 минуты
вот я передаю по ссылке объект что бы не вызвать копию объекта вот таким образом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void snf(Student* copy) {
    
 
 
}
 
 
 
 
void main(int Num, char** Argv) {
 
    setlocale(LC_ALL ,"Russian");
    Student s("Chester");
    snf(&s);
 
    system("pause >> void");
}
А вот если я объявляю объект с помощью кучи вот таким образом Student* s = new Student("Chester");
То как тогда мне передать этой функции объект по ссылке?
0
st_dent
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
04.02.2011, 22:12 8
C++
1
snf(s);
1
panicwassano
594 / 562 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
04.02.2011, 22:12 9
C++
1
snf(s)
1
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
04.02.2011, 22:18  [ТС] 10
просто читаю книгу, где сказано так:

" & - говорит, дай мне адрес переменной или еще что-то "
" * - получает значение по адресу & "
Насколько я понял, отсюда следует, что бы получить значение, то есть по ссылке передать объект, то нужно передать на него ссылку, то есть &
А как тогда мне понимать то что Вы привели мне? То есть получается я передаю ему два указателя **. Просто что бы это понять, нужно придумать этому объяснение. Возможно я немного странно выразился... Ну жду ответа экспертов. Спасибо заранее

Добавлено через 1 минуту
то есть при объявлении на объект уже стоит указатель * и в функции такой же, получается ** - просто не могу осмыслить...

Добавлено через 54 секунды
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void snf(Student* copy) {
    
 
 
}
 
 
 
 
void main(int Num, char** Argv) {
 
    setlocale(LC_ALL ,"Russian");
    Student* s = new Student("Chester");
    snf(s);
    system("pause >> void");
}
Вот так вот ошибки тоже не выдает

Добавлено через 16 секунд
вот поэтому и спрашиваю
0
st_dent
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
04.02.2011, 22:19 11
Цитата Сообщение от BTR Посмотреть сообщение
То есть получается я передаю ему два указателя **
откуда это следует?
0
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
04.02.2011, 22:20  [ТС] 12
ну при объявлении ставим указатель и в функции стоит указатель, получается **
0
st_dent
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
04.02.2011, 22:21 13
Цитата Сообщение от BTR Посмотреть сообщение
то есть при объявлении на объект уже стоит указатель * и в функции такой же, получается ** - просто не могу осмыслить...
ф-ция ожидает получить указатель на тип Студент.
Вы ей и предоставляете указатель на этот тип.
Никакого ** тут нет.
1
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
04.02.2011, 22:24  [ТС] 14
а можно подробней? Пожалуйста...
0
st_dent
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
04.02.2011, 22:25 15
Цитата Сообщение от BTR Посмотреть сообщение
вот я передаю по ссылке объект что бы не вызвать копию объекта вот таким образом
Вы не по ссылке объект передаете - вы адрес объекта передаете в функцию.
1
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
04.02.2011, 22:26  [ТС] 16
но адрес же передается с помощью &, а так пишет ошибку, вот пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void snf(Student* copy) {
    
 
 
}
 
 
 
 
void main(int Num, char** Argv) {
 
    setlocale(LC_ALL ,"Russian");
    Student* s = new Student("Chester");
    snf(&s);
    system("pause >> void");
}
0
st_dent
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
04.02.2011, 22:35 17
Три способа передачи параметра в функцию:
1.По значению
C++
1
2
3
4
5
6
7
8
9
10
11
void snf(Student copy) 
{
;
}
void main(int Num, char** Argv) {
 
        setlocale(LC_ALL ,"Russian");
        Student s("Chester");
        snf(s);
        system("pause >> void");
}
2.По ссылке
C++
1
2
3
4
5
6
7
8
9
10
11
void snf(Student &copy) 
{
;
}
void main(int Num, char** Argv) {
 
        setlocale(LC_ALL ,"Russian");
        Student s("Chester");
        snf(s);
        system("pause >> void");
}
3.Через указатель
C++
1
2
3
4
5
6
7
8
9
10
11
void snf(Student *copy) 
{
;
}
void main(int Num, char** Argv) {
 
        setlocale(LC_ALL ,"Russian");
        Student s("Chester");
        snf(&s);
        system("pause >> void");
}
В первом случае создается копия объекта. Во втором и третьем вы работаете с тем же объектом посредством переданного в ф-цию адреса(копии не создается). При этом ф-ции абсолютно без разницы как вы при этом создаете объект - динамически ли, в стеке ли...
1
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
04.02.2011, 22:47  [ТС] 18
большое спасибо

Добавлено через 8 минут
Блин, как изменить значения первой переменной в данном случае?
C++
1
2
3
4
    char* yang = "This my pointer";
    char* cppy = yang;
    cppy = "mainhen";
    cout << yang;
0
st_dent
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
04.02.2011, 23:11 19
Цитата Сообщение от BTR Посмотреть сообщение

Добавлено через 8 минут
Блин, как изменить значения первой переменной в данном случае?
C++
1
2
3
4
        char* yang = "This my pointer";
        char* &cppy = yang;
        cppy = "mainhen";
        cout << yang;
1
panicwassano
594 / 562 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
05.02.2011, 11:45 20
st_dent
у меня в книжке было написано, что при передаче по указателю создается его копия, но объект по этом адресу изменяется
1
05.02.2011, 11:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2011, 11:45

Строки: почему компилятор пишет , что переменная типа char несовместима с const char?
char pass; int password( int d) { int m; char p; cout &lt;&lt; &quot;Введите...

Когда приравниваю переменную к функции, переменная становится равна нулю
Есть функция, которая считает выражение и возвращает результат. И есть...

Переменная в main, что с ней будет?
Доброго временни суток дорогие программисты. С самого начала, как только я...


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

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

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