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

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

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

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

02.11.2012, 14:16. Просмотров 301. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2012, 14:16     Указатели
Посмотрите здесь:

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

Указатели в С++ - C++
Очень прошу обьясните почему здесь value будет = 3200, а не = адресу памяти. код: int main() { int balance; int *balptr; ...

Указатели - C++
Можно ли как-то избавиться от скобочек вокруг (*temp), как тут вообще переписать это? Item * ReadItems() { Item *head = NULL,...

Указатели - C++
С одномерным массивом, состоящим из n вещественных элементов, вы-полнить следующее: Преобразовать массив таким образом, чтобы сначала...

указатели и new - C++
объясните разницу между int *p = new int; и int *p;

Указатели - C++
char * b; - я объявил, что b является указателем на char. теперь, чтобы присвоить адрес указателю, то нужно сделать следующее char a =...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Петр1
3 / 1 / 1
Регистрация: 09.10.2012
Сообщений: 25
02.11.2012, 14:24     Указатели #2
Во втором случае ты работаешь с указателем на массив и *start указывает на 0-й элемент, если ты сделаешь вот так
C++ (Qt)
1
*start++='b';
то получишь ebo prostoi test
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 на самом деле.
Почитайте про указатели и массивы,например,у Кернигана.
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];
Петр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];
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
02.11.2012, 16:13     Указатели #6
Зачем мудрить?
C++
1
end = start+len-1;
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";
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2012, 05:57     Указатели
Еще ссылки по теме:

указатели - C++
При объявление массива через указатель int _tmain(int argc, _TCHAR* argv) { int *a; a = new int ; for (int i=0; i&lt;5; i++) {...

указатели - C++
подскажите как из этой программы сделать программу с указателями #include &lt;iostream.h&gt; using namespace std; int main() { ...

указатели с++ - C++
доброго времени суток. Подскажите с определением указателей. Пример: int**ppi, или *pi. Что значит две звездочки (знак умножения)?

Указатели - C++
Организовать ввод динамического массива размером N. Заменить положительные элементы на 1, отрицательные – на -1. Помогите пожалуйста...


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 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);
Yandex
Объявления
03.11.2012, 05:57     Указатели
Ответ Создать тему
Опции темы

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