Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   массивы в сях (https://forum.antichat.xyz/showthread.php?t=29779)

Дикс 24.12.2006 17:11

массивы в сях
 
подскажите, как создать массив с заранее заданными элементами.

в пхп раз плюнуть
$arr[] = 0;
$arr[] = 6;
$arr[] = 78;

а вот в си чего-то не выходит так.

ещё лучше если дадите ссылку на толковый эл. учебник, буду очень признателен

sni4ok 24.12.2006 17:17

Цитата:

Сообщение от Дикс
подскажите, как создать массив с заранее заданными элементами.

в пхп раз плюнуть
$arr[] = 0;
$arr[] = 6;
$arr[] = 78;

а вот в си чего-то не выходит так.

ещё лучше если дадите ссылку на толковый эл. учебник, буду очень признателен

Код:

int arr[3] = {0,6,78};
а почему выбор пал на си, а не на с++?
ну насчёт книжок, если нужен именно си, то ищи в сети Кренигана и Ричи.. ссылку прям так и не дам, но если не найдёшь, могу на мыло заслать.

Robin_Hood 24.12.2006 17:28

помоему ты просто ствил зря $ перед переменной, в С такого нету

Zadoxlik 24.12.2006 17:35

Цитата:

Сообщение от sni4ok
Код:

int arr[3] = {0,6,78};

"[3]" ставить необязательно. Массив char'ов можно задавать в кавычках двойных
Код:

char array[] = "qwerty";

sni4ok 24.12.2006 17:43

Цитата:

Сообщение от Zadoxlik
"[3]" ставить необязательно. Массив char'ов можно задавать в кавычках двойных
Код:

char array[] = "qwerty";

ну я тогда тоже выпендрюсь, и скажу, что массивы wchar_t
можна задавать в ковычках с префиксным L
Код:

wchar_t mumu[] = L"ляляля";
тока в исходном вопросе вопрос был о интах

_Great_ 24.12.2006 18:50

а давайте будем не выпендриваться, а отвечать по теме...

по теме -
int a1[] = {1,2,3};

int a2[3] = {1,2,3};

int a3[3];
a3[0] = 1;
a3[1] = 2;
a3[2] = 3;

da_ff 24.12.2006 18:52

кернигана лучше не стоит с тех пор многое изменилось с примерами будут проблемы лучше почитать про структурную часть с++ помоему никакой разницы.

sni4ok 24.12.2006 18:55

Цитата:

Сообщение от da_ff
кернигана лучше не стоит с тех пор многое изменилось с примерами будут проблемы лучше почитать про структурную часть с++ помоему никакой разницы.

вопрос по сям, если нужно именно си, то ботать плюсы нет смысла, ибо они больше и сложнее.

da_ff 24.12.2006 18:59

какая разница принтф и в си и в си++ работает одинаково а найти книжку по си с примерами компилируемыми например в вижл студии проблемно

_Great_ 24.12.2006 19:00

переписать код С++, который не использует ооп, на Си как раз плюнуть.
конечно, новичок это сделать не сможет, но, имхо, стоит учить не Си, а С++ без ооп.
Потом можно для общего образования познакомиться с Си.
Я так и сделал кстати, когда учил оба эти языка.

da_ff 24.12.2006 19:09

читать не перечитать http://c-books.info/books/load.php?ty=c там много всего

З.Ы. язвиняюсь что не по теме у меня конектор ЭрДжей к херам развалился я его по частям в гнездо засунул, а он чегото плохо работает а обжать новый нечем, да и нового то нет. Я чего хотел то ниукого такого не было может кто посоветует чего делать? ато уже 18:10 в магазин идти не охото да и завтра думаю не пойду.

sni4ok 24.12.2006 19:09

Цитата:

Сообщение от _Great_
переписать код С++, который не использует ооп, на Си как раз плюнуть.

вопрос не про это, если человеку нужен именно си,
то нафига ему ртти, нафига ему плюсовые исключения, шаблоны, классы? на сях это ему не понадобится..
и до сих пор же остались вещи куда плюсы особенно не лезут, и если человеку именно это нужно, то нафиг оно ему надо?
с другой стороны, если у человека нет определенности и есть возможность выбирать, то в дальнейшем он будет более востребован со знанием с++, чем с чистым си, но тогда и подход к изучению должен быть совсем другим, тот же Страуструп в своей книге пишет, что для изучения с++ будет лучше, если вы никогда не писали на си, так как в противном случае резко увеличивается опасность писать не правильно с точки зрения с++ и ооп в частности, но абсолютно разумно с точки зрения чистого си.

da_ff 24.12.2006 19:15

Гыгыгы а помоему автору похеру на язык и си он написал потому что влом было ++ писать =)

nerezus 24.12.2006 19:15

Цитата:

переписать код С++, который не использует ооп
Ооо, а токое бывает? )
Имеется ввиду только хороший код ;)

ATFakep 24.12.2006 19:19

Просили книгу Кернигана и Ритчи... Вот: http://openlib.org.ua/ru/books/id/14/

da_ff 24.12.2006 19:23

давайте определимся какава цель использования си. а мой взгляд это использование связки си+ВинАпи с целью уменьшения размера и увеличения скорости. тогда надо искать компилятор и хидеры класического си. иначе вижл студия или билдер всеравно накидают много всякой хрени в экзешник. а если просто написать какую нить левую програмку в целях обучения помоему нет никакой разницы что с чего начинать обучение

sni4ok 24.12.2006 19:52

Цитата:

Сообщение от da_ff
давайте определимся какава цель использования си.

например в winDDK поддержки плюсовой crt нету,
хочешь не хочешь - будешь писать на си)

Дикс 24.12.2006 20:24

открою жуткую тайну - си (а не с++) потому что я учусь на первом курсе универа и там мы изучаем именно его.
к сожалению учусь на заочном и учебника нет - потому и пишу такие вопросы

спасибо за ответы всем

da_ff 24.12.2006 20:39

хм не угадал. так ни кто не подскажет с разьемом че делать соединение падает до 1кб. Я херею как раньше люди таким скоростям радовались

Дикс 04.01.2007 20:09

почему когда я создаю массив с четырьмя элементами, там их 16 и все остальные равны нулю?
int A[4] = {6,5,4,3}
printf("%d", sizeof(A));
>> 16

тьфу блин, я начинаю подозревать что в отличии от php, здесь сайзОф возвращает вовсе не элементы. тогда как посчитать элементы?

Zadoxlik 04.01.2007 20:27

sizeof размер места, занимаемый переменной в памяти. У тебя А имеет тип массива int из 4 элементов. Обычно под разрядностью инт понимается разрядность регистра общего назначения процессора системы. В 32битных компиляторах тип int занимает 32 бита или 4 байта, а у тебя элемента 4. 4*4 = 16. Сошлось!

Дикс 04.01.2007 22:42

хоть я это и сам понял, всё равно пасиба
осталось узнать функцию, считающую кол-во элементов

Deem3n® 04.01.2007 23:36

sizeof(A)/sizeof(int)

nerezus 05.01.2007 00:59

Цитата:

sizeof(A)/sizeof(int)
имхо 1 выведет, так как 4/4(у большинства так) = 1 :)
Но не проверял, не знаю =)

Цитата:

осталось узнать функцию, считающую кол-во элементов
С или C++?
На C - никак.
На C++ - можно, но если массивы типа CArray, vector или подобные. Просто посмотри список их методов.

_Great_ 05.01.2007 01:03

int A[10];

Узнать число элементов - sizeof(A)/sizeof(*A).
Отдаст 10

nerezus, неа ;) все далеко не так

Zadoxlik 05.01.2007 01:16

Цитата:

имхо 1 выведет, так как 4/4(у большинства так) = 1
=P Nerezus

nerezus 05.01.2007 01:23

Цитата:

nerezus, неа все далеко не так
В качестве подтверждения своих слов напиши-ка ф-ию, определяющую кол-во элементов ;)

_Great_ 05.01.2007 01:28

как всегда, мы говорили о разных вещах.

Код:

int func(int a[])
{
    return sizeof(a);
}

int main()
{
    int rrr[10];
    printf("%d\n", func(rrr));
    return 0;
}

Вывод - 4.
Вполне очевидно, потому что
int func(int a[])
нихрена это не массив. В функцию передается указатель на него и это полностью аналогично этому:
int func(int *a)



Код:

        int rrr[10];
        printf("%d\n", sizeof(rrr));

Вывод - 40.
Тоже очевидно. 10 элементов по 4 байта.

nerezus 05.01.2007 01:38

Цитата:

В функцию передается указатель на него
Про что я и говорил.

Любой sizeof(), как ты сказал, определяется на этапе компиляции.
Вывод: sizeof() не подходит.
Т.к. с такой же легкостью мы можем подставить туда числовое значение.

Ну так вот, на сишнике я не вижу способа определить размер массива.

_Great_ 05.01.2007 01:48

Динамечски - конечно нельзя.
никто и не спорит)

Дикс 06.01.2007 20:18

ммм, извините ламера, но разве в этом случае sizeof(A[])/4 - не будет являться кол-вом элементов int-массива? :)

nerezus 06.01.2007 22:16

Дикс
1) при передаче в ф-ию передается не массив, а лишь указатель на его первый элемент.
2) если это не в ф-ии, то смысла нет, т.к. мы можем просто тупо набрать число с клавы.

Тем более, int != 4, хотя это верно для большинства машин(но не для всех)

_Great_ 06.01.2007 22:28

Цитата:

ммм, извините ламера, но разве в этом случае sizeof(A[])/4 - не будет являться кол-вом элементов int-массива?
насколько я помню, указатель - 4 байта, делить на четыре будет всегда еденица.

Цитата:

Тем более, int != 4, хотя это верно для большинства машин(но не для всех)
Для всех 32-битных.
Для 64-битных хз, логично предположить, что 64 бита, потому что и в 32- и в 16-битных процах размер инта был равен размеру машинного слова.

nerezus 06.01.2007 23:44

Цитата:

указатель - 4 байта, делить на четыре будет всегда еденица.
Нет, не 4 байта, а int.

_Great_ 07.01.2007 00:07

При чем тут инт )

nerezus 07.01.2007 00:21

Никогда не задумывался, отчего в том же турбопаскале нелязя было юзать больше 64кб памяти без применения спец-фишек? )
А в 32битных системах больше 4 гигов?

_Great_ 07.01.2007 00:38

а при чем тут инт )
ну совпадает оно с размером адреса нуичо)

nerezus 07.01.2007 00:42

Цитата:

нуичо
А то, что ты сказал, что при делении на 4 будет всегда 1.
А это неверно, т.к. указатель нихрена не 4, просто он 4 на большинстве машин!

_Great_ 07.01.2007 01:03

Ну блин, есесно что не везде :) лол.
Я же не говорил, что на intel 8088 он тоже 4 байта )

nerezus 07.01.2007 12:12

Цитата:

Ну блин, есесно что не везде лол.
Цитата:

насколько я помню, указатель - 4 байта
На большинстве современных машин - 8.


Время: 14:53