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

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

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

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

07.02.2013, 20:08. Просмотров 347. Ответов 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 - вот тут не совсем понятно. ведь по идее должен быть адрес на первый элемент массива. почему так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Пёс
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Эксперт С++
12885 / 7271 / 810
Регистрация: 27.09.2012
Сообщений: 17,970
Записей в блоге: 2
Завершенные тесты: 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Эксперт С++
12885 / 7271 / 810
Регистрация: 27.09.2012
Сообщений: 17,970
Записей в блоге: 2
Завершенные тесты: 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++
C++ передать в функцию стек на указателях

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

Или воспользуйтесь поиском по форуму:
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