|
|
|
Помогите новичку со строками
|
|||
|---|---|---|---|
|
#18+
Всем доброе время суток Помогите пожалуйста разобраться: Есть такой пример 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 новый символ Оба они если смотреть логически указывают на начало массива символьных строк вот выводят результат по разному почему? Заранее спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2005, 18:08 |
|
||
|
Помогите новичку со строками
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. Что тебя смущает в том, что два разных принтфа выводят результат по разному? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2005, 18:26 |
|
||
|
Помогите новичку со строками
|
|||
|---|---|---|---|
|
#18+
меня смущает не разный вывод prinf а то что два указателя на char при операции инкремента указывают на совершенно разные значения........ я конечно понимаю что туплю, но хочеться разобраться чтобы понять эту ситуацию Получается все дело в объявлении? но тогда другной пример есть переменная а ="abc" есть указатель на нее char *n n = &a. тогда если взятьи создать указатель на n - char**m и сделать m = &n то при операции инкремента и там и там будут получаться одинаковые значения.............. а в данном случае..... что то я совсем запутался....... буду очень признателен если кто то прояснит ситуацию с данными указателями....... Заранее благодарен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2005, 23:42 |
|
||
|
Помогите новичку со строками
|
|||
|---|---|---|---|
|
#18+
по объявлению Код: plaintext 1. ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2005, 23:48 |
|
||
|
Помогите новичку со строками
|
|||
|---|---|---|---|
|
#18+
абисняю. Есть указатель на строку (_ptr), а есть указатель на указатель на строку(ptr). В указателе на строку находится адрес самой строки. А указатель на указатель на строку содержит адрес в памяти, где хранится адрес строки. При инкременте указателя его значение изменяется на размер объекта, на который указывает указатель. ptr - это просто массив указателей на строки. _ptr - указатель на массив символов одной строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2005, 23:57 |
|
||
|
Помогите новичку со строками
|
|||
|---|---|---|---|
|
#18+
char** - массив строк. Вроде, всё просто, но на самом деле всё гораздо хитрее. char* - строка, массив символов, указатель на символ. argv - массив указателей на символ (на начало каждой строки): | адрес начала первой строки | адрес начала второй строки | ... и т.д. | но ptr не содержит ни одного из этих значений, он на них указывает. А вот *ptr - это уже один из этих адресов из этого массива (char*) и это значение уже можно скармливать принтфу как строку (если скормишь сам ptr, выдастся трэш, т.к. по этому адресу массив адресов, а никак не символьные данные, ещё и access violation заработаешь на свою задницу). _ptr - указатель на символ в массиве символов (в строке): | первый символ | второй символ | и т.д. |, содержит именно адрес символа, *_ptr уже можно скармливать принтфу в качестве символа, если скормишь _ptr вместо символа выдастся тоже что-нибудь странное, но в этом случае уже рискуешь испохабить стек и снова схлопотать ЕГО, access violation. ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2005, 00:09 |
|
||
|
Помогите новичку со строками
|
|||
|---|---|---|---|
|
#18+
Понял спасибо всем огромное ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2005, 09:50 |
|
||
|
Помогите новичку со строками
|
|||
|---|---|---|---|
|
#18+
Еще раз уточнить..... т.е. получается что сhar*_ptr указывает на символ и при приращении увеличивается на величину типа char. а char**ptr указывает на указатель и при приращении увеличивается на величину типа указатель. .....и тогда вроде все складывается во вполне понятную картинку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2005, 09:54 |
|
||
|
Помогите новичку со строками
|
|||
|---|---|---|---|
|
#18+
АлексейЕще раз уточнить..... т.е. получается что сhar*_ptr указывает на символ и при приращении увеличивается на величину типа char. а char**ptr указывает на указатель и при приращении увеличивается на величину типа указатель. .....и тогда вроде все складывается во вполне понятную картинку Так оно и есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2005, 10:42 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33091574&tid=2033222]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 408ms |

| 0 / 0 |
