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

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

Войти
Регистрация
Восстановить пароль
 
kebal
9 / 9 / 0
Регистрация: 02.11.2012
Сообщений: 153
#1

Указатели - C++

02.11.2012, 14:16. Просмотров 308. Ответов 7
Метки нет (Все метки)

например мы имеем данный кусок кода
C++
1
2
3
4
5
6
char str[]="eto prostoi test";
    char *start;
    start=str;
    cout<<start;
    *start='b';
    cout<<start;
Первоначальный cout выводит всю строку. То есть по идее start ссылается на весь массив.
Но когда мы переменной в данном указателе присваиваем b изменяется только первый символ из строки.
Получается start ссылался на первый символ в массиве.
И как так получилось? Указатель не меняли, а он указывает в одном случае на массив символов, а во втором случае на один символ.
первый cout выводит eto prostoi test
второй cout выводит bto prostoi test
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2012, 14:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатели (C++):

Указатели и указатели на указатели, а также типы данных - C++
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

Через указатели на указатели посчитать сумму двух чисел и записать в третье - C++
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать примитивный калькулятор, пользуясь только...

Указатели на указатели с числами. Почему можно присвоить число в 4-ый элемент, если массив из 2 элементов? - C++
Есть массив int **mas; mas=new int*; // выделил место под пять строк, верно ? mas=new int;// выделил для первой строки матрицы два...

Есть три переменные. Используя указатели на указатели, поменять значение максимальной и минимальной переменной - C++
Мой код. #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include&lt;iomanip&gt; using namespace std; void min_max(int*pa, int*pb,...

Отсортировать массив и вывести на экран (массивы и указатели на указатели) - C++
Даны массивы F-фамилий студентов и S-результаты сессии (5 оценок) , причем s- результат сессии F студента. Отсортировать массив S по...

Указатели на слонов или А зачем нужны указатели? - C++
Знаю что таких вопросов было уйма, но я так и не нашел ответа на свой вопрос. Для чего нужны указатели? Что такое указатели я знаю, это...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Петр1
3 / 1 / 1
Регистрация: 09.10.2012
Сообщений: 25
02.11.2012, 14:24 #2
Во втором случае ты работаешь с указателем на массив и *start указывает на 0-й элемент, если ты сделаешь вот так
C++ (Qt)
1
*start++='b';
то получишь ebo prostoi test
0
Rexer
163 / 162 / 20
Регистрация: 10.10.2010
Сообщений: 724
02.11.2012, 14:27 #3
Все правильно
Сначала вы выводите всю строку,так как вы создаете указатель на массив,на 0-ой элемент,но cout это метод ostream-а,поэтому он выводит вам всю строку,первый cout
Далее вы разыменовываете указатель(а он ссылается на 'e'),после этого вы присваеваете ему 'b',по сути меняете только один элемент.
и снова выводите как обычно
*(start+3) - это 'o',например,но при этом start все также указывает на 0-й элемент массива
вас запутал cout на самом деле.
Почитайте про указатели и массивы,например,у Кернигана.
1
kebal
9 / 9 / 0
Регистрация: 02.11.2012
Сообщений: 153
02.11.2012, 14:33  [ТС] #4
А где ошибка в данном куске кода?

C++
1
2
3
char *end;
int len=5;
end=&(start+len-1);
Мы заставляем указатель end указывать на str[4];
0
Петр1
3 / 1 / 1
Регистрация: 09.10.2012
Сообщений: 25
02.11.2012, 14:36 #5
наверно
C++
1
end=&(*(start+len-1));
или все же так правильнее будет
C++
1
end=&start[len-1];
1
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
02.11.2012, 16:13 #6
Зачем мудрить?
C++
1
end = start+len-1;
0
kebal
9 / 9 / 0
Регистрация: 02.11.2012
Сообщений: 153
03.11.2012, 00:01  [ТС] #7
Пожалуйста, помогите ещё и с этим. После ввода обоих строк выскакиеват еррор.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char str_array[2][80],*p1,*p2;
    cout<<"Vvedite 1 stroky: ";
    gets(str_array[0]);
    p1=str_array[0];
    cout<<"Vvedite 2 stroky: ";
    gets(str_array[1]);
    p2=str_array[1];
    while(*p1){
        if(isupper(*p1)) tolower(*p1);
        p1++;
    }
    while(*p2){
        if(isupper(*p2)) tolower(*p2);
        p2++;
    }
    if(!strcmp(str_array[0],str_array[1])) cout<<"Stroki ravni!!!\n";
    else cout<<"Stroki ne ravni!!!\n";
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.11.2012, 05:57 #8
Цитата Сообщение от kebal Посмотреть сообщение
После ввода обоих строк выскакиеват еррор.
Когда русские вводите?
C++
1
2
3
4
...
if(isupper((unsigned char)*p1)) tolower((unsigned char)*p1);
...
if(isupper((unsigned char)*p2)) tolower((unsigned char)*p2);
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2012, 05:57
Привет! Вот еще темы с ответами:

Написать программу сортировки через указатели на указатели - C++
Вот моя программа #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; using namespace std; //Сортировка &quot;пузырьком&quot;. ...

Используются ли на практике указатели на указатели объектов? - C++
Имеются ввиду указатели именно на объекты, а не динамические массивы. Например такой: Object** obj; А как насчёт такого: Object***...

Указатели и массивы. Указатели и функции - C++
Никак не разберусь с указателями на функцию. Пишу в Visual Studio. Надо написать функцию Compress() с использованием указателей, которая...

Указатели на массивы. Указатели и функции - C++
Вот задача: Даны два массива : А и B. Необходимо создать третий массив, в котором нужно собрать: -Элементы обоих массивов; -Общие...


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

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

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