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

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

Восстановить пароль Регистрация
 
Winhttp
59 / 59 / 0
Регистрация: 05.01.2013
Сообщений: 235
07.02.2013, 20:08     немного об указателях #1
есть код:
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++ ошибка в указателях
C++ обьясните простым языком о указателях * и &
C++ Об указателях
написать стёк на указателях C++
Расскаэите о указателях на функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Пёс
 Аватар для Пёс
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
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 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
59 / 59 / 0
Регистрация: 05.01.2013
Сообщений: 235
07.02.2013, 22:35  [ТС]     немного об указателях #8
Цитата Сообщение от Пёс Посмотреть сообщение
у Вас везде intb ? что это значит.
да. немного не так сообщение написал, но по коду можете видеть, что не везде.
В чаровских массивах выводится все что есть до символа '\n', означающего что строка закончена.
да нет, символ "\0" или NULL как выше писали, означает конец строки. но вопрос был не об выводе строки самой, а об выводе адреса указателя на первый элемент массива .
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 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++ Об указателях по философски-математически

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

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

Текущее время: 08:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru