roboforum.ru

Технический форум по робототехнике.
Текущее время: 27 ноя 2024, 04:27

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Функции в CVAVR
СообщениеДобавлено: 01 июл 2008, 22:28 
Не в сети

Зарегистрирован: 05 июн 2008, 22:03
Сообщения: 163
Откуда: Украина,Одесса
прог. языки: С,Java,SQL если это язык,C++ немного
Может глупый вопрос, но как подсчитать длину массива в CVAVR ? Тоесть показать количество элементов.

Код:
int a;
int array[2]={1,2};
a=array.lenght;
Вот так компилятор ругается
a=array->lenght; И так тоже.


Требует шоб слева от -> и . была структура


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Функции в CVAVR
СообщениеДобавлено: 01 июл 2008, 23:20 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
"Язык Си" - http://avr123.nm.ru/05.htm


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Функции в CVAVR
СообщениеДобавлено: 02 июл 2008, 00:40 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
a=sizeof(array); можно попробовать...

_________________
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Функции в CVAVR
СообщениеДобавлено: 02 июл 2008, 01:19 
Не в сети

Зарегистрирован: 05 июн 2008, 22:03
Сообщения: 163
Откуда: Украина,Одесса
прог. языки: С,Java,SQL если это язык,C++ немного
На другом форуме подсказали
b = sizeof(ar)/sizeof(int); Эта шняга работает.
Но не работает следующее:
int a=2;
int b[a]; <- пишет что должна быть константа


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Функции в CVAVR
СообщениеДобавлено: 02 июл 2008, 09:05 
Не в сети
Аватара пользователя

Зарегистрирован: 27 ноя 2004, 00:42
Сообщения: 3339
Откуда: совсем Москва
ФИО: Григорий
потому что Си - это не Васик :)
и даже на васике так динамические массивы не создают.
в Си надо выделять память функцией. эта функция возвращает указатель. Если у тебя есть переменная типа "указатель на целое", то ты можешь с этим указателем работать как с массивом. Насчет длины такого массива (чтоб не выйти за пределы выделенной памяти) ты должен заботиться сам.

Если тебе не надо менять в программе длину массива динамически, а нужна просто гибкость на этапе компиляции (чтоб не искать по тексту, где что завязано на длину массива), то вместо того, чтоб создавать переменную а, определи ее с помощью #define - тогда все будет пучком - будешь перед компиляцией ее значение менять и массив будет в разных версиях прошивки разный.

ЗЫ: читай хелпы по сям и в инете шарь. (как говорится, RTFM)

_________________
злой полицейский


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Функции в CVAVR
СообщениеДобавлено: 02 июл 2008, 10:05 
Не в сети

Зарегистрирован: 05 июн 2008, 22:03
Сообщения: 163
Откуда: Украина,Одесса
прог. языки: С,Java,SQL если это язык,C++ немного
А вообще идея такая:

int a[]={1,2};

int l=sizeof(a)/sizeof(a[0]);

int b[l]; //заполнение будет происходить по ходу программы
Длинна массива менятся не будет


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Функции в CVAVR
СообщениеДобавлено: 02 июл 2008, 11:22 
Не в сети
Аватара пользователя

Зарегистрирован: 27 ноя 2004, 00:42
Сообщения: 3339
Откуда: совсем Москва
ФИО: Григорий
Ну и зачем? :D
размер массива а задан жестко еще на этапе компиляции, но ты его вычисляешь, суешь в переменную и пытаешься создать новый массив.... Это разве логично?
Копай в сторону #define

_________________
злой полицейский


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Функции в CVAVR
СообщениеДобавлено: 02 июл 2008, 16:47 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
Вообще если лень учить язык можно вообщу так: int a[];
Или так: int * a;

А вообще книжек в сети куча, язык не такой уж и сложный - бери и учи, чтоб глупые вопросы не задавать. Я советую книжку: Керниган Ричи "Язык Си". Тут на форуме где-то упоминалась, юзай поиск...

_________________
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Функции в CVAVR
СообщениеДобавлено: 02 июл 2008, 19:21 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
-= Александр =- писал(а):
Я советую книжку: Керниган Ричи "Язык Си".


ЕЁ и посоветовал во втором посте. :D Но народ не любит зрение портить читая книжки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Функции в CVAVR
СообщениеДобавлено: 03 июл 2008, 00:47 
Не в сети

Зарегистрирован: 05 июн 2008, 22:03
Сообщения: 163
Откуда: Украина,Одесса
прог. языки: С,Java,SQL если это язык,C++ немного
Спасибо всем за полезные ответы. :shock:
Решилось все следующим образом:

int pas[]={1,2,3,4,5};
int ent[ sizeof(pas)/sizeof(pas[0]) ];

Вот и все


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Функции в CVAVR
СообщениеДобавлено: 03 июл 2008, 12:56 
Не в сети
Аватара пользователя

Зарегистрирован: 27 ноя 2004, 00:42
Сообщения: 3339
Откуда: совсем Москва
ФИО: Григорий
я фигею :o
:ROFL:

snayperAlfa, а ты понимаешь, почему оно решилось? (Это не издевка, а нормальный вопрос - если не понимаешь, объясню)

_________________
злой полицейский


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Функции в CVAVR
СообщениеДобавлено: 03 июл 2008, 18:21 
Не в сети

Зарегистрирован: 05 июн 2008, 22:03
Сообщения: 163
Откуда: Украина,Одесса
прог. языки: С,Java,SQL если это язык,C++ немного
Может потому что там строго задан размер,который попадает под описание константы.Хотя следующая строчка не работает:

int pas[]={1,2,3,4,5};
const int l=(sizeof(pas)/sizeof(pas[0])) ;
int ent[ l];


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Функции в CVAVR
СообщениеДобавлено: 03 июл 2008, 18:38 
Не в сети
Аватара пользователя

Зарегистрирован: 27 ноя 2004, 00:42
Сообщения: 3339
Откуда: совсем Москва
ФИО: Григорий
Я думаю, что все из-за оптимизации компилятора - он видимо вычисляет значение на этапе компиляции и все.

А тот способ, о котором я тебе выше говорил (с #define) такой:

в начале файла где всякие #include пишешь:
Код:
#define RAZMER = 5


а потом a том месте, где массивы определяешь:
Код:
int pas[RAZMER]={1,2,3,4,5};
int ent[RAZMER];


#define - это директива предварительного парсера - перед тем, как текст проги будет откомпилирован, она скармливается этому парсеру и он обрабатывает директивы. Все, что начинается с # - это указания этому парсеру.
Например, когда ты пишешь #include <aaaa.h> - это указание парсеру всунуть в текст вместо этой строки текст из файла "аааа.h".
Так и с #define - парсер знает, что все строчки "RAZMER" в тексте надо заменить на "5".
И только после того, как текст проги обработан парсером, он скармливается компилятору. Т.е. компилятор думает, что ты изначально в тексте написал так:
Код:
int pas[5]={1,2,3,4,5};
int ent[5];


Вот такая полезная штука :wink:

_________________
злой полицейский


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Функции в CVAVR
СообщениеДобавлено: 03 июл 2008, 18:47 
Не в сети

Зарегистрирован: 05 июн 2008, 22:03
Сообщения: 163
Откуда: Украина,Одесса
прог. языки: С,Java,SQL если это язык,C++ немного
Спасибо за твое изложение,но я это знаю:про дефайны и инклюды.В универе в позапрошлом году изучал С.Идея заключалась чтобы размер массива сам вычислялся.Тоесть дописал в массив еще одно число и не надо больше нигде в программе ничего менять.Возможно,количество элементов массива будет менятся через самопрограммированние.Вроде бы это так называется :oops: Или в еепром потом этот массив сохранять.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Функции в CVAVR
СообщениеДобавлено: 03 июл 2008, 19:09 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Или плохо учили, или плохо учился :(
Размер статического массива задается или явно - константой, или неявно - инициализацией. const определяет не константу, а переменную, значение которой не может меняться после создания. Ты хочешь вот что:

Код:
#define ASIZE (sizeof(a) / sizeof(*a))

int a[] = {1,2,3,4};
int b[ASIZE];


_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO