Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Winhttp
61 / 61 / 5
Регистрация: 05.01.2013
Сообщений: 235
1

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

07.02.2013, 20:08. Просмотров 417. Ответов 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
Ответы с готовыми решениями:

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

Запутался в указателях
Поиск элемента, равного figure void remove_helper(std::shared_ptr&lt;BTreeItem&gt;...

Ошибка в указателях
Здравствуйте, не понимаю почему выводит мусор. Вроде бы все правильно сделал....

Написать стек на указателях
хочю знать как написать стёк на указателях мне нужно чтобы можно было...

Реализация стека на указателях
Стек на указателях: #include &lt;iostream&gt; using std::cin; using std::cout;...

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

Не по теме:

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

0
Пёс
228 / 76 / 9
Регистрация: 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
61 / 61 / 5
Регистрация: 05.01.2013
Сообщений: 235
07.02.2013, 22:35  [ТС] 8
Цитата Сообщение от Пёс Посмотреть сообщение
у Вас везде intb ? что это значит.
да. немного не так сообщение написал, но по коду можете видеть, что не везде.
В чаровских массивах выводится все что есть до символа '\n', означающего что строка закончена.
да нет, символ "\0" или NULL как выше писали, означает конец строки. но вопрос был не об выводе строки самой, а об выводе адреса указателя на первый элемент массива .
0
Croessmah
++Ͻ
14634 / 8381 / 1584
Регистрация: 27.09.2012
Сообщений: 20,602
Записей в блоге: 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;
}
1
MrGrig
177 / 160 / 38
Регистрация: 08.10.2012
Сообщений: 423
09.02.2013, 20:57 10
Цитата Сообщение от Пёс Посмотреть сообщение
Здрасьте, приехали....
сказанул ога, сори '\0' =D спать было охото просто.. =с
0
09.02.2013, 20:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2013, 20:57

Реализация очереди на указателях
Очередь на указателях: #include &lt;iostream&gt; using std::cin; using...

Совсем запутался в указателях
Шестую строку не могу понять, по моему перед массивом var должен стоять &amp;....

Стек на указателях не компилируется
#include &lt;iostream&gt; using std:: cin; using std:: cout; using std:: endl; ...


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

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

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