Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
Передача указателя в функцию с/с++
Новая тема
Ответить
цитата
14/10/09 в 10:33
freeek
ньюбский вопрос к С/С++ кодерам, по сабжу ничего внятного не нашел
суть:
Код:
int main()
{
struct new_st
{
char somevar[80];
сhar charvar;
float dblevar;
int digit;
};
struct new_st stArray[50];
/*
bla bla bla
*/
void someFunction(struct* )
{
//some action
}
}
так вот, как правильно передать в функцию указатель на массив структур или массив указателей
цитата
14/10/09 в 11:37
Dr.Syshalt
Код:
// правильно так:
void someFunction(struct* st, long count) {
}
...
main() {
struct new_st stArray[50];
...
someFunction(stArray, 50);
}
Чтобы при обработке структур не вылезти за пределы массива, someFunction() должна знать его размер. А если это C++ - то лучше ссылки использовать, а не указатели. Безопаснее. От массивов тоже лучше отказаться, а использовать STL - если этот кусок, конечно, не сильно критичен по времени исполнения.
Код:
include <vector>
someFunction( const std::vector<new_st>& st ) {
...
}
main() {
std::vector<new_st> stArray;
...
someFunction(stArray);
}
цитата
14/10/09 в 11:42
Yacc
http://www.cyberguru.ru/programming/cpp/cpp-programming-rules2-page7.html
цитата
14/10/09 в 12:11
freeek
Dr.Syshalt писал:
Код:
// правильно так:
void someFunction(struct* st, long count) {
}
...
main() {
struct new_st stArray[50];
...
someFunction(stArray, 50);
}
Чтобы при обработке структур не вылезти за пределы массива, someFunction() должна знать его размер. А если это C++ - то лучше ссылки использовать, а не указатели. Безопаснее. От массивов тоже лучше отказаться, а использовать STL - если этот кусок, конечно, не сильно критичен по времени исполнения.
Код:
include <vector>
someFunction( const std::vector<new_st>& st ) {
...
}
main() {
std::vector<new_st> stArray;
...
someFunction(stArray);
}
да верно, немного некоректно привел пример
по теме: интерисует покамест только С,
т.е. логи такая же как при передаче указатела на обычный массив? имя массива и есть указатель на его первый элемент?
цитата
14/10/09 в 12:17
Dr.Syshalt
freeek писал:
т.е. логи такая же как при передаче указатела на обычный массив? имя массива и есть указатель на его первый элемент?
Разумеется
цитата
14/10/09 в 12:20
freeek
а я че то не в те дебри ушел, спутали -> из пхп
оценил
цитата
18/10/09 в 12:51
freeek
а такой момент как область видимости?
если мы описали структуру в main
будет ли наша функция знать об этом типе данных?
т.е. либо мы описываем структуру в глобальной области
либо в формальной области функции?
поправте
цитата
18/10/09 в 13:06
freeek
маденький код для наглядности, в данном случае работает так как и ожидаем, но если переносим описание cars в тело main, то возникает ошибка использования необпределенного типа
Код:
struct cars
{
char marka[50];
int produce;
float drived;
float price;
};
void fill(struct cars*);
int _tmain(int argc, _TCHAR* argv[])
{
struct cars car[2];
fill(car);
printf("newPrice: %.2f\nsecPrice: %.2f\n",car[0].price,car[1].price);
}
void fill(struct cars* st)
{
st->price = 9956.23;
(++st)->price = 1245.325;
return;
}
в связи с этим как правильно описать передать структуру определеную локально
цитата
19/10/09 в 14:36
Dr.Syshalt
freeek писал:
в связи с этим как правильно описать передать структуру определеную локально
Никак. Для этого и существует область видимости.
Если нужно передать неопределенный тип данных - используют void*
То есть можешь определить ее в двух местах, в main и функции, и в функции, которой передан void*, кастить к нужному виду
Только зачем такой геморрой?
цитата
19/10/09 в 18:21
freeek
самиобразование
хочу сразу разобраться с этим вопросом и попутными, чтоб потом не ломать голву, почему не работает
я видел код где структуру описывают в формальной области, что то типа
Код:
void func(struct { int var; char var;} abc){
...
}
последний вопрос, если можно, где почитать:
запись массива структур в файл
и импорт из файла обратно в массив ткой же структуры?
Новая тема
Ответить
Эта страница в полной версии