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

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

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

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

07.02.2013, 20:08. Просмотров 378. Ответов 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 - вот тут не совсем понятно. ведь по идее должен быть адрес на первый элемент массива. почему так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2013, 20:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос немного об указателях (C++):

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

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

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

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

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

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

9
Пёс
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 ? что это значит.
0
Croessmah
Эксперт CЭксперт С++
13425 / 7579 / 856
Регистрация: 27.09.2012
Сообщений: 18,668
Записей в блоге: 3
Завершенные тесты: 1
07.02.2013, 21:34 #3
Цитата Сообщение от Winhttp Посмотреть сообщение
как я понял, в си строка - это не массив символов
как раз в Си это массив символов. Вы же используете класс-обертку над ним(объект std::basic_string).
Цитата Сообщение от Winhttp Посмотреть сообщение
в третьем случае выводит intb=dcba
так перегружен cout. Хотите увидеть адрес, кастуйте к void*
0
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
07.02.2013, 21:40 #4
Цитата Сообщение от Winhttp Посмотреть сообщение
в третьем случае выводит intb=dcba - вот тут не совсем понятно. ведь по идее должен быть адрес на первый элемент массива. почему так?
В чаровских массивах выводится все что есть до символа '\n', означающего что строка закончена.
0
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
07.02.2013, 21:51 #5
Цитата Сообщение от MrGrig Посмотреть сообщение
В чаровских массивах выводится все что есть до символа '\n', означающего что строка закончена.
Здрасьте, приехали....
0
Croessmah
07.02.2013, 21:51
  #6

Не по теме:

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

0
Пёс
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;
}
0
Winhttp
60 / 60 / 0
Регистрация: 05.01.2013
Сообщений: 235
07.02.2013, 22:35  [ТС] #8
Цитата Сообщение от Пёс Посмотреть сообщение
у Вас везде intb ? что это значит.
да. немного не так сообщение написал, но по коду можете видеть, что не везде.
В чаровских массивах выводится все что есть до символа '\n', означающего что строка закончена.
да нет, символ "\0" или NULL как выше писали, означает конец строки. но вопрос был не об выводе строки самой, а об выводе адреса указателя на первый элемент массива .
0
Croessmah
Эксперт CЭксперт С++
13425 / 7579 / 856
Регистрация: 27.09.2012
Сообщений: 18,668
Записей в блоге: 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;
}
1
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
09.02.2013, 20:57 #10
Цитата Сообщение от Пёс Посмотреть сообщение
Здрасьте, приехали....
сказанул ога, сори '\0' =D спать было охото просто.. =с
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2013, 20:57
Привет! Вот еще темы с ответами:

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

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

Реализация стека на указателях - C++
Стек на указателях: #include &lt;iostream&gt; using std::cin; using std::cout; using std::endl; enum FirstNodeEnum{NoFirstNode,...

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


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
09.02.2013, 20:57
Ответ Создать тему
Опции темы

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