LINUX.ORG.RU

CHAR*


0

0

Уважаемые, расскажите пожалуйсто что есть char *s, и чем он отличаются от char s[255], и почему нельзя char ss[255]=char *qq, есть ли разница в позиции char* s или char *s;

anonymous

>Уважаемые, расскажите пожалуйсто что есть char *s, и чем он отличаются от char s[255],

char *s - ukazatel na char. char s[255] - massiv iz 256 elementov tipa char, gde s - ukazatel na ego pervij element.

> есть ли разница в позиции char* s или char *s;

net

kame
()

Добавлю.

char *s -- просто указатель. В момент объявления он (в общем случае) ни на что не указывает (память не выделена, её надо выделять явно).

char s[255] -- массив из 255 элементов типа char, s -- указатель на первый элемент. В момент объявления выделяется память под 255 элементов.

Записи (в случае выделенной памяти) *(s+offset) и s[offset] эквивалентны и обозначают offset-й элемент.

Obidos ★★★★★
()

Как всегда много трепу но никто не ответил по существу.
В ПРИНЦИПЕ, между char *a и char b[255] разницы почти никакой.
Грубо говоря
char b[255] это char *b;b=(char*)malloc(sizeof(char)*255);

НО!
можно сделать a=b но b=a сделать нельзя потому что b
"статически" опеределенный указатель на "статический" массив.
На самом деле он конечно не статический но можно считать и
так поскольку на уровне C/C++ никто тебе менять его не дасть.
И поэтому неисключено что оптимизатор зная что ты его (указатель)
изменить не могешь может обрабатывать его совсем по другому.

vahvarh ★★★
()
Ответ на: комментарий от vahvarh

Есть ещё одна разница. Насколько помню, char a[255] размещается (выделяется память) на стеке, тогда как char *b;b=(char*)malloc(sizeof(char)*255) -- в куче.

Obidos ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.