Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> void, struct... user 
:(
    Опции темы
FrAcTaL_life
Дата 22.11.2003, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 9.11.2003

Репутация: нет
Всего: нет



Что такое void?
А именно:

Код

// void ставится до функции и может еще быть в параметрах
// зачем он там?

void ShowCout (void)
{
.....
}

// в чем разница если я поставлю перед функцией
// void или int?
//============
//а в параметрах может быть void ничего не означает, а
//является обычным аргументом?


И еще *)..., в чем разница между struct и class?
Вродебы одинаковые вызовы из вне, обращения, передачи аргументов в функции...

Это сообщение отредактировал(а) FrAcTaL_life - 22.11.2003, 13:52
PM MAIL   Вверх
Hroft
Дата 22.11.2003, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 20.10.2003
Где: Москва

Репутация: нет
Всего: 3



void - "никакой" тип. void* - указатель на любой тип.
перед именем функции void означает, что ф-я не фозвращает значения, и в ней не может быть return'а.
получается паскалевская процедура.
если не ошибаюсь, то в новых стандартах не рекомендуется писать void в качестве списка параметров.
нужно просто оставлять скобки пустыми. это от С осталось.
а class и struct различаются: по умолчанию все члены у структуры public, а у класса private. не помню точно, но и наследуются они с модификаторами public у структуры и private у класса. т.е.:
struct s1 {
private:
int x;
};
и
class s2 {
int x;
};
эквивалентны, как и
class s_1 {
public:
int x;
};
и
struct s_2 {
int x;
};

Это сообщение отредактировал(а) Hroft - 22.11.2003, 15:24
PM MAIL ICQ   Вверх
FrAcTaL_life
Дата 22.11.2003, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 9.11.2003

Репутация: нет
Всего: нет



1. вот ты (Hroft) написал void*...
А что собственно дает эта звездочка? Есть еще char*

2. в примерах книги (по которой я изучаю с++) перед функцией мелькает int.
на что он указывает? на аргументы(типа все аргументы int)?

PM MAIL   Вверх
NiJazz
Дата 22.11.2003, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 1
Всего: 23



FrAcTaL_life, тут же не школа. Бери книгу и вперёд! Список литературы есть на форуме.
PM MAIL   Вверх
FrAcTaL_life
Дата 22.11.2003, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 9.11.2003

Репутация: нет
Всего: нет



NiJazz
В моих книгах это ненаписано, поэтому и спрашиваю!
PM MAIL   Вверх
NiJazz
Дата 22.11.2003, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 1
Всего: 23



FrAcTaL_life, значит у тебя книги не по С++... smile.gif
PM MAIL   Вверх
NiJazz
Дата 22.11.2003, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 1
Всего: 23



FrAcTaL_life, ибо это базовые понятия и они ОБЯЗАНЫ быть в книгах по С++.
PM MAIL   Вверх
FrAcTaL_life
Дата 22.11.2003, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 9.11.2003

Репутация: нет
Всего: нет



NiJazz
Извини но ты бы лучше вместо того чтобы попрекать, ответил на вопрос!

А на счет книг...., да не знаю...., написано С++ и мне кабы достачно этого smile.gif


PM MAIL   Вверх
NiJazz
Дата 22.11.2003, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 1
Всего: 23



Звёздочка означает, что эта переменная не является элементом данного типа, а только указателем на значение его. То есть её значение - адрес, по которому расположено значение в памяти. Таким образом можно, зная адрес, можно использовать значение.

void - пустота. Можно понимать это так.

Всё же лучше почитай книгу внимательно... Удачи! ;)
PM MAIL   Вверх
<Spawn>
Дата 23.11.2003, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Если говорить с точки зрения паскаля, то void* это нетипизированный указатель, т.е. указатель, указывающий на данный любого типа(в Паскале он называется Pointer). Т.е. адрес на который ссылается этот указатель может содержать различные данные - переменную, структуру, адресс функции и т.д. Попросту говоря это есть переменная размером 4 байта(по крайней мере в 32-разрядных ОС), содержащая в себе значение, являющееся адресом переменной, на которую ссылается указатель. Примеры:

Код

 void* p;
 //Выделяем память в 4 байта.
 p = AllocMem(4);
 //Делаем явное приведение типов к int и коссвенно ссылаемся на память, выделенную в предыдущей инструкции, при помощи *. (В Паскале данная операция называется разыменование указателя и обозначается ^)
 *((int*) p) = 10;
 ShowMessage(IntToStr(*((int*) p)));
 //если тебе, например, нужно получить значение младшего байта, то
 ShowMessage(IntToStr(*((char*) p)));
 ...


Код
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 // Для примера сделаем такую сруктуру
struct Test{
  char a;
  char b;
  char c;
};
Test MyTest;
MyTest.a = 10;
MyTest.b = 20;
MyTest.c = 40;
void* p;
//присваиваем нашему указателю адрес переменной MyTest типа Test
p = &MyTest;

ShowMessage(IntToStr(*((char*) p)));  //Читаем значение MyTest.a
ShowMessage(IntToStr(*((char*) p + 1)));  //Читаем знчение MyTest.b(MyTest.a со смещением в 1 байт)
ShowMessage(IntToStr(*((char*) p + 2)));  //Читаем значение MyTest.c(MyTest.a со смещением в 2 байта)
}


Так же ты можешь увидеть, что некоторые АПИ функции используют нетепизированный указатель для передачи в них адреса функции.
Сори если где ошибся, поскольку Си я учу пару недель и все может быть.

Это сообщение отредактировал(а) <Spawn> - 23.11.2003, 15:33


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
<Spawn>
Дата 23.11.2003, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Ои, когда читал, то показалось, что был вопрос про void*. Ну ни чего страшного.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1953 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.