![]() |
массивы в сях
подскажите, как создать массив с заранее заданными элементами.
в пхп раз плюнуть $arr[] = 0; $arr[] = 6; $arr[] = 78; а вот в си чего-то не выходит так. ещё лучше если дадите ссылку на толковый эл. учебник, буду очень признателен |
Цитата:
Код:
int arr[3] = {0,6,78};ну насчёт книжок, если нужен именно си, то ищи в сети Кренигана и Ричи.. ссылку прям так и не дам, но если не найдёшь, могу на мыло заслать. |
помоему ты просто ствил зря $ перед переменной, в С такого нету
|
Цитата:
Код:
char array[] = "qwerty"; |
Цитата:
можна задавать в ковычках с префиксным L Код:
wchar_t mumu[] = L"ляляля"; |
а давайте будем не выпендриваться, а отвечать по теме...
по теме - int a1[] = {1,2,3}; int a2[3] = {1,2,3}; int a3[3]; a3[0] = 1; a3[1] = 2; a3[2] = 3; |
кернигана лучше не стоит с тех пор многое изменилось с примерами будут проблемы лучше почитать про структурную часть с++ помоему никакой разницы.
|
Цитата:
|
какая разница принтф и в си и в си++ работает одинаково а найти книжку по си с примерами компилируемыми например в вижл студии проблемно
|
переписать код С++, который не использует ооп, на Си как раз плюнуть.
конечно, новичок это сделать не сможет, но, имхо, стоит учить не Си, а С++ без ооп. Потом можно для общего образования познакомиться с Си. Я так и сделал кстати, когда учил оба эти языка. |
читать не перечитать http://c-books.info/books/load.php?ty=c там много всего
З.Ы. язвиняюсь что не по теме у меня конектор ЭрДжей к херам развалился я его по частям в гнездо засунул, а он чегото плохо работает а обжать новый нечем, да и нового то нет. Я чего хотел то ниукого такого не было может кто посоветует чего делать? ато уже 18:10 в магазин идти не охото да и завтра думаю не пойду. |
Цитата:
то нафига ему ртти, нафига ему плюсовые исключения, шаблоны, классы? на сях это ему не понадобится.. и до сих пор же остались вещи куда плюсы особенно не лезут, и если человеку именно это нужно, то нафиг оно ему надо? с другой стороны, если у человека нет определенности и есть возможность выбирать, то в дальнейшем он будет более востребован со знанием с++, чем с чистым си, но тогда и подход к изучению должен быть совсем другим, тот же Страуструп в своей книге пишет, что для изучения с++ будет лучше, если вы никогда не писали на си, так как в противном случае резко увеличивается опасность писать не правильно с точки зрения с++ и ооп в частности, но абсолютно разумно с точки зрения чистого си. |
Гыгыгы а помоему автору похеру на язык и си он написал потому что влом было ++ писать =)
|
Цитата:
Имеется ввиду только хороший код ;) |
Просили книгу Кернигана и Ритчи... Вот: http://openlib.org.ua/ru/books/id/14/
|
давайте определимся какава цель использования си. а мой взгляд это использование связки си+ВинАпи с целью уменьшения размера и увеличения скорости. тогда надо искать компилятор и хидеры класического си. иначе вижл студия или билдер всеравно накидают много всякой хрени в экзешник. а если просто написать какую нить левую програмку в целях обучения помоему нет никакой разницы что с чего начинать обучение
|
Цитата:
хочешь не хочешь - будешь писать на си) |
открою жуткую тайну - си (а не с++) потому что я учусь на первом курсе универа и там мы изучаем именно его.
к сожалению учусь на заочном и учебника нет - потому и пишу такие вопросы спасибо за ответы всем |
хм не угадал. так ни кто не подскажет с разьемом че делать соединение падает до 1кб. Я херею как раньше люди таким скоростям радовались
|
почему когда я создаю массив с четырьмя элементами, там их 16 и все остальные равны нулю?
int A[4] = {6,5,4,3} printf("%d", sizeof(A)); >> 16 тьфу блин, я начинаю подозревать что в отличии от php, здесь сайзОф возвращает вовсе не элементы. тогда как посчитать элементы? |
sizeof размер места, занимаемый переменной в памяти. У тебя А имеет тип массива int из 4 элементов. Обычно под разрядностью инт понимается разрядность регистра общего назначения процессора системы. В 32битных компиляторах тип int занимает 32 бита или 4 байта, а у тебя элемента 4. 4*4 = 16. Сошлось!
|
хоть я это и сам понял, всё равно пасиба
осталось узнать функцию, считающую кол-во элементов |
sizeof(A)/sizeof(int)
|
Цитата:
Но не проверял, не знаю =) Цитата:
На C - никак. На C++ - можно, но если массивы типа CArray, vector или подобные. Просто посмотри список их методов. |
int A[10];
Узнать число элементов - sizeof(A)/sizeof(*A). Отдаст 10 nerezus, неа ;) все далеко не так |
Цитата:
|
Цитата:
|
как всегда, мы говорили о разных вещах.
Код:
int func(int a[])Вполне очевидно, потому что int func(int a[]) нихрена это не массив. В функцию передается указатель на него и это полностью аналогично этому: int func(int *a) Код:
int rrr[10];Тоже очевидно. 10 элементов по 4 байта. |
Цитата:
Любой sizeof(), как ты сказал, определяется на этапе компиляции. Вывод: sizeof() не подходит. Т.к. с такой же легкостью мы можем подставить туда числовое значение. Ну так вот, на сишнике я не вижу способа определить размер массива. |
Динамечски - конечно нельзя.
никто и не спорит) |
ммм, извините ламера, но разве в этом случае sizeof(A[])/4 - не будет являться кол-вом элементов int-массива? :)
|
Дикс
1) при передаче в ф-ию передается не массив, а лишь указатель на его первый элемент. 2) если это не в ф-ии, то смысла нет, т.к. мы можем просто тупо набрать число с клавы. Тем более, int != 4, хотя это верно для большинства машин(но не для всех) |
Цитата:
Цитата:
Для 64-битных хз, логично предположить, что 64 бита, потому что и в 32- и в 16-битных процах размер инта был равен размеру машинного слова. |
Цитата:
|
При чем тут инт )
|
Никогда не задумывался, отчего в том же турбопаскале нелязя было юзать больше 64кб памяти без применения спец-фишек? )
А в 32битных системах больше 4 гигов? |
а при чем тут инт )
ну совпадает оно с размером адреса нуичо) |
Цитата:
А это неверно, т.к. указатель нихрена не 4, просто он 4 на большинстве машин! |
Ну блин, есесно что не везде :) лол.
Я же не говорил, что на intel 8088 он тоже 4 байта ) |
Цитата:
Цитата:
|
| Время: 14:53 |