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

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

Войти
Регистрация
Восстановить пароль
 
Winhttp
60 / 60 / 0
Регистрация: 05.01.2013
Сообщений: 235
#1

немного об указателях - C++

07.02.2013, 20:08. Просмотров 363. Ответов 9
Метки нет (Все метки)

есть код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <windows.h>
 
using namespace std;
 
int main()
{
    int inta=1234;
    int *intb=&inta;
    string stra="abcd";
    string *strb=&stra;
    char cha[]="dcba";
    char *chb=&cha[0];
 
    cout<<"1. ukazatel int:\n"
    <<"intb = "<<intb<<"\n"
    <<"*intb = "<<*intb<<"\n";
    cout<<"2. ukazatel string:\n"
    <<"strb = "<<strb<<"\n"
    <<"*strb = "<<*strb<<"\n";
    cout<<"2. ukazatel char:\n"
    <<"chb = "<<chb<<"\n"
    <<"*chb = "<<*chb<<endl;
    system("pause");
}
/**< 
1. ukazatel int:
intb=0x22ff1c
*intb=1234
2. ukazatel string:
intb=0x22ff18
*intb=abcd
3. ukazatel char:
intb=dcba
*intb=d
*/
в первом случае выводит intb=0x22ff1c - тут все понятно, адрес, ну и значение - *intb=1234
во втором - intb=0x22ff18 это адрес, *intb=abcd - это значение . как я понял, в си строка - это не массив символов, как например в делфи и сишарп?
в третьем случае выводит intb=dcba - вот тут не совсем понятно. ведь по идее должен быть адрес на первый элемент массива. почему так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2013, 20:08     немного об указателях
Посмотрите здесь:

Об указателях - C++
В чем разница между этими двумя строчками? int* x; int *x;

Ошибка в указателях - C++
Здравствуйте, не понимаю почему выводит мусор. Вроде бы все правильно сделал. Знаю что можно было сделать p = rand(); но меня это не...

Реализация очереди на указателях - C++
Очередь на указателях: #include &lt;iostream&gt; using std::cin; using std::cout; using std::endl; const int Number = 10; enum...

Совсем запутался в указателях - C++
Шестую строку не могу понять, по моему перед массивом var должен стоять &amp;. const int MAX = 3; int _tmain(int argc, _TCHAR* argv) {...

Об указателях по философски-математически - C++
Допустим, имеем код: int *p; Есть мнение, что истолковать запись можно двояко: 1) р - тип, указывающий на инт; 2) р -...

Стек на указателях не компилируется - C++
#include &lt;iostream&gt; using std:: cin; using std:: cout; using std:: endl; struct NodePtr { char Value; NodePtr* Next; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
07.02.2013, 21:27     немного об указателях #2
Цитата Сообщение от Winhttp Посмотреть сообщение
есть код:
C++
1
2
3
4
5
6
7
8
9
10
11
/**< 
1. ukazatel int:
intb=0x22ff1c
*intb=1234
2. ukazatel string:
intb=0x22ff18
*intb=abcd
3. ukazatel char:
intb=dcba
*intb=d
*/
в первом случае выводит intb=0x22ff1c - тут все понятно, адрес, ну и значение - *intb=1234
во втором - intb=0x22ff18 это адрес, *intb=abcd - это значение . как я понял, в си строка - это не массив символов, как например в делфи и сишарп?
в третьем случае выводит intb=dcba - вот тут не совсем понятно. ведь по идее должен быть адрес на первый элемент массива. почему так?
у Вас везде intb ? что это значит.
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 1
07.02.2013, 21:34     немного об указателях #3
Цитата Сообщение от Winhttp Посмотреть сообщение
как я понял, в си строка - это не массив символов
как раз в Си это массив символов. Вы же используете класс-обертку над ним(объект std::basic_string).
Цитата Сообщение от Winhttp Посмотреть сообщение
в третьем случае выводит intb=dcba
так перегружен cout. Хотите увидеть адрес, кастуйте к void*
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
07.02.2013, 21:40     немного об указателях #4
Цитата Сообщение от Winhttp Посмотреть сообщение
в третьем случае выводит intb=dcba - вот тут не совсем понятно. ведь по идее должен быть адрес на первый элемент массива. почему так?
В чаровских массивах выводится все что есть до символа '\n', означающего что строка закончена.
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
07.02.2013, 21:51     немного об указателях #5
Цитата Сообщение от MrGrig Посмотреть сообщение
В чаровских массивах выводится все что есть до символа '\n', означающего что строка закончена.
Здрасьте, приехали....
Croessmah
07.02.2013, 21:51
  #6

Не по теме:

Цитата Сообщение от MrGrig Посмотреть сообщение
В чаровских массивах выводится все что есть до символа '\n', означающего что строка закончена.
'\n'?

Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
07.02.2013, 21:54     немного об указателях #7
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
 
int main()
{
    char arr[] = "String\nString 2\nString3\nString4";
    cout << arr;
    return 0;
}
Добавлено через 2 минуты
В С++ и Си строкой считается массив, оканчивающийся символом '\0'

C++
1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
 
int main()
{
    char arr[] = "String\0No_String 2\0No_String3\0No_String4";
    cout << arr;
    return 0;
}
Winhttp
60 / 60 / 0
Регистрация: 05.01.2013
Сообщений: 235
07.02.2013, 22:35  [ТС]     немного об указателях #8
Цитата Сообщение от Пёс Посмотреть сообщение
у Вас везде intb ? что это значит.
да. немного не так сообщение написал, но по коду можете видеть, что не везде.
В чаровских массивах выводится все что есть до символа '\n', означающего что строка закончена.
да нет, символ "\0" или NULL как выше писали, означает конец строки. но вопрос был не об выводе строки самой, а об выводе адреса указателя на первый элемент массива .
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 1
08.02.2013, 10:57     немного об указателях #9
Цитата Сообщение от Winhttp Посмотреть сообщение
а об выводе адреса указателя на первый элемент массива .
я ж Вам написал - кастуйте его к void*
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
int main(){
    char cha[]="dcba";
    char *chb=&cha[0];
    std::cout<<static_cast<void*>(chb)<<std::endl;
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2013, 20:57     немного об указателях
Еще ссылки по теме:

Расскаэите о указателях на функции - C++
Всем дорого времени суток. Объясните нубу для чего необходимы указатели на функции и как и где их правильно применять... Что-то до меня...

Написать стек на указателях - C++
хочю знать как написать стёк на указателях мне нужно чтобы можно было добавлять новые елемнты сколько угодно а уберать не обязтельно ...

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

Обьясните простым языком об указателях * и & - C++
Всё что в книгах прочитал, но толком не могу понять зачем нужны * и &amp;. Обьясните кто может, простым языком...


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

Или воспользуйтесь поиском по форуму:
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
09.02.2013, 20:57     немного об указателях #10
Цитата Сообщение от Пёс Посмотреть сообщение
Здрасьте, приехали....
сказанул ога, сори '\0' =D спать было охото просто.. =с
Yandex
Объявления
09.02.2013, 20:57     немного об указателях
Ответ Создать тему
Опции темы

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