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

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

Войти
Регистрация
Восстановить пароль
 
shocoladka
7 / 7 / 0
Регистрация: 02.12.2010
Сообщений: 71
#1

String - C++

15.12.2010, 13:34. Просмотров 426. Ответов 8
Метки нет (Все метки)

почему вот в этой программе измняется строка есил к ссылке на неё прибавить число?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream.h>
 
    int main(void)
 
    {
        int p=3;
        char b[60];
        cin.getline(b,60);
       char *string=b;
       char *p1;
       int &wordOffset=p;
       p1=string+p;
       cout<<p1;
       system("pause");
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2010, 13:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос String (C++):

Доступ к паре в map<string, vector<pair<string, string>>>Temp - C++
Подскажите пожалуйста как получить данные в векторе пар ? void showData(const map&lt;string, vector&lt;pair&lt;string, string&gt;&gt;&gt;Temp) { ...

Какое одинаковое значение можно вернуть из функций <string> f () и vector < <string> > f()? - C++
Понятное дело, что всё обсуждение будет вертеться вокруг аналога NULL. char* f_0 () { return NULL; } char** f_1 () { ...

Как используя C-String а потом и String class варьировать вывод? - C++
Дана задача: при вводе полного И.О.Ф. (в таком порядке) выводить Ф, И и О(только первую букву и .). И если О не задано - выводить только...

Как преобразовать char* в string и вывести переменную string на экран? - C++
for (int k = 0; k &lt; 10; k++) { int x = (int)rand() / RAND_MAX + rand() % 6 + 2; char *chars = new char; ...

Есть ли аналог Map <String,String> чтобы передавать его как указатель на данные? - C++
Добрый день, подскажите, есть ли аналог Map &lt;String,String&gt; чтобы передавать его как указатель на данные? Заранее спасибо!

Где и почему используют ту или иную строку std::string, char[], System::String^ ? - C++
Где и почему используют ту или иную строку std::string, char, System::String^ ? Объясните пожалуйста где нужно использовать...

8
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,386
Записей в блоге: 2
Завершенные тесты: 1
15.12.2010, 13:46 #2
Строка не меняется, просто выводится не сначала, а с 3-го символа.
0
shocoladka
7 / 7 / 0
Регистрация: 02.12.2010
Сообщений: 71
15.12.2010, 14:00  [ТС] #3
а почему так получается?
0
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,386
Записей в блоге: 2
Завершенные тесты: 1
15.12.2010, 14:04 #4
Цитата Сообщение от shocoladka Посмотреть сообщение
а почему так получается?
Потому, что так в коде написанно))
Вот в этой строке:
C++
1
p1=string+p;
К адресу строки прибавляется 3 и это значение присваивается указателю. Далее выводится строка начиная с получившегося адреса.
0
shocoladka
7 / 7 / 0
Регистрация: 02.12.2010
Сообщений: 71
15.12.2010, 14:42  [ТС] #5
А можете поподробнее обьяснить что происходит когда к адресу прибавляешь число
0
deadlock
376 / 355 / 8
Регистрация: 14.12.2010
Сообщений: 1,265
15.12.2010, 14:59 #6
Цитата Сообщение от shocoladka Посмотреть сообщение
А можете поподробнее обьяснить что происходит когда к адресу прибавляешь число
можно и вычитать.
пытаешься обратиться к участку памяти с адресом: базовый адрес+число, в данном случае получилось смешение на 3 байта (массив char) от начала массива - то есть третий элемент массива.
попробуй обратись за пределы массива, например: p1=string+61 - сразу получишь сообщение об ошибке.
1
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,386
Записей в блоге: 2
Завершенные тесты: 1
15.12.2010, 15:04 #7
Цитата Сообщение от deadlock Посмотреть сообщение
попробуй обратись за пределы массива, например: p1=string+61 - сразу получишь сообщение об ошибке.
Не факт, на все воля компилятора)
0
deadlock
376 / 355 / 8
Регистрация: 14.12.2010
Сообщений: 1,265
15.12.2010, 15:05 #8
какой сишный компилятор не ругнется в данном случае?
0
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,386
Записей в блоге: 2
Завершенные тесты: 1
15.12.2010, 15:15 #9
Цитата Сообщение от deadlock Посмотреть сообщение
какой сишный компилятор не ругнется в данном случае?
Таких много, компилятор и не должен ругаться в данном случае, на то он и C, власть над памятью в руках программиста.

Добавлено через 37 секунд
попробуйте в своем компиляторе подобное сделать.
0
15.12.2010, 15:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2010, 15:15
Привет! Вот еще темы с ответами:

Заменить использование istringstream на вариант из string или string.h - C++
Как заменить 14 строку функцией из &lt;string&gt; или &lt;string.h&gt; и без &lt;sstream&gt; {deleted} П.5.19.Правил Запрещено создавать темы в виде...

Идентификатор string не определён при наличии #include <string> - C++
Я ввёл библеотеку #include &lt;string&gt;, но не смотря на это мне выдаёт ошибку: &quot;индефикатор string не определён&quot;. Объясните, пожалуйста, это...

Здравствуйте! Создал класс std::string. Не создается объкт типа string... Подскажите в чем причина? - C++
#include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;string.h&gt; //using namespace std; class string { private: int...

Не хочет принимать string в шаблон TStack<string> - C++
Уважаемые форумчане,помогите пожалуйста разобраться в чем проблема. Компилятор выдает такую ошибку : &quot;Error C2679: бинарный «&lt;&lt;«: не...


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

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

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