Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 23.08.2012, 18:19  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Сообщение от Yurkin2007 Посмотреть сообщение
Размер массива data известен. Размер передавемого функции параметра data неизвестен.
Нет, "линия водораздела" проходит иначе. И размер массива, и размер параметра компилятору известен - иначе он не смог бы правильно распределить память под массив и под параметр, а вот какой именно массив будет передан функции и какого именно он будет размера, сама функция предполагать не имеет права (ведь в разных вызовах м.б. переданы разные массивы - data1, data2 и т.д.). Кстати, именно по этой причине рассчитывать на то, что
Сообщение от Yurkin2007 Посмотреть сообщение
размер будет известен ... при вызове функции при выполнении программы.
ей нельзя!

Сообщение от Yurkin2007 Посмотреть сообщение
Ну, дык, просветите меня, пожалуйста, если это, конечно, не военная тайна!
Это не военная тайна и я, как минимум, на предыдущей странице написал, какой раздел нужно почитать, чтобы не совершать этих ошибок.
Переписывать этот раздел сюда из учебника я не буду, так как это абсолютно бессмыссленное занятие - у меня оно временя отнимет, а никому из участников не сэкономит, так как чтение этого раздела займет одинаковое время, что из книги, что со страниц этого топика. Неужели это не очевидно?
Реклама:
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 23.08.2012, 18:23  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Т.к. страница перелистнулась, пока я писал, пост, на который я ссылался, оказался не на предыдущей, а на предпредыдущей странице... :о)
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 23.08.2012, 18:46  
nonamedov
Почётный гражданин KAZUS.RU
 
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Сообщение от tempora Посмотреть сообщение
сама функция предполагать не имеет права (ведь в разных вызовах м.б. переданы разные массивы - data1, data2 и т.д.).
Ясней не скажешь!
В общем случае определить размер матрицы можно так:
Код:
[typeofdata] data[];
size=sizeof(data)/sizeof(data[0]);
nonamedov вне форума  
Непрочитано 23.08.2012, 19:09  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Ну, так как увж.tempora не раскололся, внесу ясность: sizeof(var) возвращает размер переменной в байтах. И если массив состоит из char, то его размер равен числу элементов массива. Что, собственно, и подразумевалось на протяжении нескольких последних страниц.
Yurkin2007 вне форума  
Непрочитано 23.08.2012, 19:18  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Сообщение от Yurkin2007 Посмотреть сообщение
Что, собственно, и подразумевалось
Вот как раз подразумевать-то и не следует, так как "подразумеваемое" компилятору неизвестно. Скажем, если через пару дней (недель) ТС станет посылать sms-ки с русскими буквами, размер массива в байтах и количество элементов в нем уже не будут равны (cм. добавление). А вот определение "sizeof(array)/sizeof(array[0])" останется верным и при переходе к multibyte-массивам.
_____________________
++: та же беда произойдёт, при переносе этого приёма на любые массивы, элементы которых имеют рамер отличный от 1 байта.
__________________
There's always more than one way to skin a cat.

Последний раз редактировалось tempora; 23.08.2012 в 19:23.
tempora вне форума  
Непрочитано 23.08.2012, 20:02  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Сообщение от tempora Посмотреть сообщение
Вот как раз подразумевать-то и не следует
Я так и думал, что весь сыр-бор из-за этого.
Не, ну, чё , блин, за наезд-то?!?
Засели старпёры, гнобят молодёжь!
Я где-нибудь утверждал, что sizeof(array) возвращает количество элементов array?
Yurkin2007 вне форума  
Непрочитано 23.08.2012, 20:02  
nonamedov
Почётный гражданин KAZUS.RU
 
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Боюсь, что с с массивом неопределенной длины sizeof не работает, в таком случае применение этого оператора, как мне кажется, вообще бессмысленно.
nonamedov вне форума  
Непрочитано 23.08.2012, 20:58  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

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

Сообщение от Yurkin2007 Посмотреть сообщение
Я так и думал, что весь сыр-бор из-за этого.
То есть, с массивами, указателями, константными выражениями, областями видимости, передачей параметров и временем/способом определения компилятором размеров памяти, выделяемой под данные, у вас проблем нету?

Сообщение от Yurkin2007 Посмотреть сообщение
Не, ну, чё , блин, за наезд-то?!?
Я где-нибудь утверждал, что sizeof(array) возвращает количество элементов array?
Так считал ТС, когда делил массив на три группы элементов:
Код:
    ...
    len=sizeof(data)/3; 

    for(i=0; i‹len; i++) 
    { 
        a0 = data[i*3];
    ...
и никто (в том числе и вы, любезный) его не поправил - так и продолжали писать sizeof там, где высчитывалось количество элементов массива, из чего логично следует предположение, что все это пишущие считают будто sizeof возвращает размерность, а не размер.

Сообщение от Yurkin2007 Посмотреть сообщение
Засели старпёры, гнобят молодёжь!
Вам подсказывают, как не расставлять грабли на своём пути.
__________________
There's always more than one way to skin a cat.

Последний раз редактировалось tempora; 23.08.2012 в 21:05.
tempora вне форума  
Непрочитано 23.08.2012, 21:21  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Ну, есть же очевидные вещи. ТС объявил массив data, состоящий из char, и определяет его длину как
Код:
len=sizeof(data);
прекрасно представляя себе, что размер элемента равен 1 байту. Будет другой размер элемента - будем делить на его размер, это ежу понятно.
По-Вашему, правильнее было бы написать
Код:
len=sizeof(data)/1;
при этом, не объясняя своей позиции, делать таинственные глаза и отправлять читать учебники!
Ну, совершенно не в строчку Ваши замечания, к тому же они не ответили на вопрос ТС о неработающей программе и увели дискуссию в сторону...

Последний раз редактировалось Yurkin2007; 23.08.2012 в 21:26.
Yurkin2007 вне форума  
Непрочитано 23.08.2012, 21:42  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Сообщение от Yurkin2007 Посмотреть сообщение
По-Вашему, правильнее было бы написать
Код:
len=sizeof(data)/1;
при этом, не объясняя своей позиции, ...
Правильный вариант уже неоднократно упоминался - "sizeof(array)/sizeof(array[0])". Позицию свою я объяснил.

Сообщение от Yurkin2007 Посмотреть сообщение
... Ваши замечания, ... увели дискуссию в сторону...
Наоборот - я привел точный перечень ошибок разных "советчиков", чем вернул т.н. "дискуссию" из области, где одна ошибка накладывалась на другую, к существу проблем ТС.
__________________
There's always more than one way to skin a cat.
tempora вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Видео уроки dosikus Микроконтроллеры, АЦП, память и т.д 61 23.01.2012 21:06
Видео уроки (flash) Proteus 7.1 fmssp Proteus 5 13.08.2007 03:56
AVR уроки Рюмика chipic128 Proteus, KiCAD и другие ECAD 9 07.03.2007 21:46
уроки от LABCENTRE(PIC12F675+C) dosikus Микроконтроллеры, АЦП, память и т.д 22 09.10.2006 10:16


Часовой пояс GMT +4, время: 10:10.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot