![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 25.04.2009
Сообщений: 3
|
![]()
Пришла мне пора вспомнить Си, но вот беда, я один из тех людей, что родились без понимания указателей.
У меня не ладятится несколько вещей, попробую объяснить как думаю, а вы подсобите ![]() Код:
src = 7 src2 = 8 Логично. Если пишем char c[10]; char *pc = c; // pc показывает на первый элемент в с. Код:
my_int = Tedd2 ------ my3 ------ Tedd2 my_int2 = kkkkk Тоже в общем-то логично. Идем дальше. На этот раз создаем массив через указатель. Задата та же, изменить все буквы на к. char *my = "Tedd"; // my показыват опять же на первую букву в массике, K. То есть содержит ее адрес в памяти. printf("my_int = %c\n", *my); // выдает T Код:
my_int = Tedd ------ my2 ------ T Вылетает на строчке *source = 'k'; Если ее откомментировать, то Tedd пишется нормально. Другими словами *source содержит элемент массива но изменить его не дает. Почему? ![]() |
![]() |
![]() |
![]() |
#2 |
Maniac
Форумчанин
Регистрация: 03.01.2009
Сообщений: 450
|
![]() Код:
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 25.04.2009
Сообщений: 3
|
![]()
Константа в мэйне или становится когда проходит в функцию?
Я так понимаю, что тогда надо брать двойной указатель? |
![]() |
![]() |
![]() |
#4 | |
Maniac
Форумчанин
Регистрация: 03.01.2009
Сообщений: 450
|
![]() Цитата:
нужно так Код:
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
|
|
![]() |
![]() |
![]() |
#5 |
Great Code Monkey
Форумчанин
Регистрация: 09.08.2007
Сообщений: 533
|
![]()
Iggel
Когда вы пишете char my_char[] = "Tedd2", вы объявляете в стеке массив, в который автоматом заносятся копии символов. Поэтому массив изменять можно. Когда вы пишете char *my_char = "Tedd2", вы объявляете указатель, который содержит адрес строки Tedd2 в неизменяемой статической области памяти. Поэтому данные по этому адресу менять нельзя. |
![]() |
![]() |
![]() |
#6 |
Регистрация: 25.04.2009
Сообщений: 3
|
![]()
ISergeyN, still_alive
Спасибо ![]() Собственно еще вопрос: Код:
Printf пишет пустую строку без ничего размером 4 (Tedd), хотя туда вроде копируются символы. Потом вылетаем с ошибкой. Но если делать так: strcpy(out, "Banderlog"); // а вот с этим почему-то работает. //*out = '\0'; // добавить конец строки То printf пишет бандерлога, но размер все равно 4. На этот раз ничего не вылетает и бандерлог виден даже вне функции. |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Указатели и массивы. (С++) | Eddie | Помощь студентам | 8 | 24.04.2009 19:48 |
Задачка для Бонард Си... тема: указатели и массивы... | Катюшенька | Помощь студентам | 2 | 26.01.2009 22:18 |
Указатели и динамические массивы. | Airou | Общие вопросы C/C++ | 5 | 16.01.2009 19:05 |
С++.Указатели и массивы | Wia | Помощь студентам | 1 | 15.12.2008 18:29 |
Задачи на массивы и указатели в СИ | D@rk_Spirit | Общие вопросы C/C++ | 3 | 29.12.2007 08:01 |