powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите новичку со строками
9 сообщений из 9, страница 1 из 1
Помогите новичку со строками
    #33091300
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброе время суток
Помогите пожалуйста разобраться:
Есть такой пример
int main(int argc,char** argv)
{
char ** ptr;
char * _ptr;
int arg = 0;
ptr = argv;
_ptr = *argv;
while(arg++<argc)
{
printf("%s \n",*(ptr++));
printf("%c \n",*(_ptr));
ptr++;
_ptr++;
}
return 0;
}

При каждой итерации цикла ptr отображает новую строку
а _ptr новый символ
Оба они если смотреть логически указывают на начало массива символьных строк
вот выводят результат по разному почему?

Заранее спасибо
...
Рейтинг: 0 / 0
Помогите новичку со строками
    #33091331
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
ptr++; - это переход к следующей строке в массиве argv
_ptr++; - это переход к следующему символу

Что тебя смущает в том, что два разных принтфа выводят результат по разному?
...
Рейтинг: 0 / 0
Помогите новичку со строками
    #33091574
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
меня смущает не разный вывод prinf а то что два указателя на char при операции инкремента указывают на совершенно разные значения........
я конечно понимаю что туплю, но хочеться разобраться чтобы понять эту ситуацию
Получается все дело в объявлении? но тогда другной пример есть переменная а ="abc" есть указатель на нее char *n n = &a. тогда если взятьи создать указатель на n - char**m и сделать m = &n то при операции инкремента и там и там будут получаться одинаковые значения.............. а в данном случае.....

что то я совсем запутался....... буду очень признателен если кто то прояснит ситуацию с данными указателями.......

Заранее благодарен
...
Рейтинг: 0 / 0
Помогите новичку со строками
    #33091575
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по объявлению
Код: plaintext
1.
char ** ptr; - указатель на строку
char * _ptr; - указатель на символ
поэтому первый движется по строкам, второй - по символам.
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Помогите новичку со строками
    #33091577
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
абисняю.
Есть указатель на строку (_ptr), а есть указатель на указатель на строку(ptr).
В указателе на строку находится адрес самой строки. А указатель на указатель на строку содержит адрес в памяти, где хранится адрес строки.
При инкременте указателя его значение изменяется на размер объекта, на который указывает указатель. ptr - это просто массив указателей на строки. _ptr - указатель на массив символов одной строки.
...
Рейтинг: 0 / 0
Помогите новичку со строками
    #33091586
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
char** - массив строк. Вроде, всё просто, но на самом деле всё гораздо хитрее. char* - строка, массив символов, указатель на символ. argv - массив указателей на символ (на начало каждой строки): | адрес начала первой строки | адрес начала второй строки | ... и т.д. | но ptr не содержит ни одного из этих значений, он на них указывает. А вот *ptr - это уже один из этих адресов из этого массива (char*) и это значение уже можно скармливать принтфу как строку (если скормишь сам ptr, выдастся трэш, т.к. по этому адресу массив адресов, а никак не символьные данные, ещё и access violation заработаешь на свою задницу). _ptr - указатель на символ в массиве символов (в строке): | первый символ | второй символ | и т.д. |, содержит именно адрес символа, *_ptr уже можно скармливать принтфу в качестве символа, если скормишь _ptr вместо символа выдастся тоже что-нибудь странное, но в этом случае уже рискуешь испохабить стек и снова схлопотать ЕГО, access violation.
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Помогите новичку со строками
    #33091811
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял спасибо всем огромное
...
Рейтинг: 0 / 0
Помогите новичку со строками
    #33091825
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз уточнить.....
т.е. получается что сhar*_ptr указывает на символ и при приращении увеличивается на величину типа char.
а char**ptr указывает на указатель и при приращении увеличивается на величину типа указатель.

.....и тогда вроде все складывается во вполне понятную картинку
...
Рейтинг: 0 / 0
Помогите новичку со строками
    #33091962
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АлексейЕще раз уточнить.....
т.е. получается что сhar*_ptr указывает на символ и при приращении увеличивается на величину типа char.
а char**ptr указывает на указатель и при приращении увеличивается на величину типа указатель.

.....и тогда вроде все складывается во вполне понятную картинку
Так оно и есть
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите новичку со строками
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]