Официальный сайт студ.городка НГТУ
Программирование и БД » Вопрос в С++ про класса пямяти. 

#1  30.10.06 16:40

Вопрос в С++ про класса пямяти.

#include<stdio.h>
static void matrix_multiply(
int result[3][3],
int matrix1 [3][3],
int matrix2 [3][3]
)
{
int row, col, element;
for(row=0;row<3;++row)
{
for(col=0;col<3;++col)
{
result[row][col]=0;
for(element=0;element<3;++element)
{
result[row][col]+=
matrix1[row][element]*matrix2[element][col];
}
}
}
static void matrix_print(
int matrix[3][3]
)
{
int row, col;
for(row=0;row<3;++row)
{
for(col=0;col<3;++col)
{
printf("%d\t", matrix[row][col]);
}
printf("\n");
}
}
int main(void)
{
int matrix_a[3][3]={
{45, 82, 26},
{32, 11, 13},
{89, 81, 25}
};
int matrix_b[3][3]={
{32, 43, 50},
{33, 40, 52},
{20, 12, 32}
};
int result[3][3];
matrix_multiply(result, matrix_a, matrix_b);
matrix_print(result);
return(0);
};
}

Почему класс памяти "static void matrix_print" не допускается?
заранее большое спасибо за помощь.

Offline

#2  30.10.06 16:51

Re: Вопрос в С++ про класса пямяти.

Укроп написал(а):

керакл хитренький массивы в функции передает ))

Это не я бляяя...

Offline

#3  30.10.06 17:24

Re: Вопрос в С++ про класса пямяти.

Укроп написал(а):

Mozg_RUS, хотя это же статик ))) возможно всё ))

Это не я бляяя...

Offline

#4  30.10.06 17:33

Re: Вопрос в С++ про класса пямяти.

Gerakl, почитай чего-нибудь по стилю и оформлению кода..
и используй тег [ code][/ code]

Offline

#5  30.10.06 18:01

Re: Вопрос в С++ про класса пямяти.

Мож я зря учусь на ФПМИ, но скаких пор стали передавать массив целиком в функцию??? Компилер не ругается? А static вроде функции приписать нельзя....

Offline

#6  30.10.06 18:08

Re: Вопрос в С++ про класса пямяти.

Укроп написал(а):

JONIK написал(а):

А static вроде функции приписать нельзя....

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

Это не я бляяя...

Offline

#7  30.10.06 18:10

Re: Вопрос в С++ про класса пямяти.

Укроп написал(а):

кстати и массив в функцию тоже можно было передать, и тоже при каких то условиях

Это не я бляяя...

Offline

#8  30.10.06 18:14

Re: Вопрос в С++ про класса пямяти.

Жесть...  Щас покомпилил. Вижуал шестой поплакал что скобки нету.

А передача массива работает!!! Я в шоке! Хиценко застрелилась бы!!
Да, и static здесь ваще роли не играет. Насколько я помню если объекту, описанному внутри блока приписать класс пямяти static то его значение можно юзать вне блока. Вроде еще какие-то изощрения есть, но я не помню.

Offline

#9  30.10.06 18:14

Re: Вопрос в С++ про класса пямяти.

JONIK написал(а):

о скаких пор стали передавать массив целиком в функцию??? Компилер не ругается?

стандарт С++ этого не запрещает. Другое дело, что этот способ в общем случае неэффективен из-за затрат на создание копии массива

JONIK написал(а):

А static вроде функции приписать нельзя....

можно, если ты хочешь ограничить область действия функции модулем, в котором эта функция описана

Offline

#10  30.10.06 18:33

Re: Вопрос в С++ про класса пямяти.

Fatboy просвяти в функции создается копия передаваемого массива или функция работает с массивом (памятью то бишь как при передаче указателя), определенным в блоке, из которого вызывают?

Offline

#11  30.10.06 19:31

Re: Вопрос в С++ про класса пямяти.

,,,

Исправлено Смайлек (30.10.06 19:32)

Offline

#12  30.10.06 20:00

Re: Вопрос в С++ про класса пямяти.

имя массива является указателем на его первый элемент (mas == &mas[0][0]), поэтому массив передается по указателю и копия не создается. В этом ты можешь убедиться посмотрев в отладчике адреса у массива result, который в main(), и у массива result, который локальный в matrix_multiply() - они совпадают.

Кстати, я неправильно тут написал

Fatboy написал(а):

Другое дело, что этот способ в общем случае неэффективен из-за затрат на создание копии массива

не массива, а объекта...

Offline

#13  30.10.06 22:38

Re: Вопрос в С++ про класса пямяти.

Укроп написал(а):

керакл хитренький массивы в функции передает ))

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

и кстати,

Gerakl написал(а):

Почему класс памяти "static void matrix_print" не допускается?

VS 6.0 допускает.

Offline

#14  30.10.06 23:43

Re: Вопрос в С++ про класса пямяти.

Mozg_RUS написал(а):

про., он имеет ввиду классы памяти (extern,auto,static,register).
Укроп, не говори, я вообще всю жизнь думал, что массивы можно передавать только по адресу, а размерности передавать отдельными параметрами. А вон как все просто.
Gerakl, допускается, только зачем? У тебя просто фигурной скобки не хватает, после
result[row][col]+=
matrix1[row][element]*matrix2[element][col];
поставь ещё одну '}'. А после return(0); "};" убери.

Результат должен быть
11072     12627     16262
3157       3664       5034
13605     16307     22366

а эта прога получилось совсем другой результат. :(

Offline

#15  30.10.06 23:47

Re: Вопрос в С++ про класса пямяти.

Andron_ написал(а):

Укроп написал(а):

керакл хитренький массивы в функции передает ))

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

и кстати,

Gerakl написал(а):

Почему класс памяти "static void matrix_print" не допускается?

VS 6.0 допускает.

я в Borland C++ 3.1 for Dos.

Offline

#16  31.10.06 03:05

Re: Вопрос в С++ про класса пямяти.

Gerakl написал(а):

я в Borland C++ 3.1 for Dos

здесь разницы особой нет, ибо спецификатор static даже в Си-без-всяких-плюсов присутствовал.. в твоём случае виновата ошибка в синтаксисе.

А вообще совет тебе - выкинь свой компилятор на свалку истории, поставь хотя бы Borland C++ 5.02. А если 16-битные приложения вообще не собираешься писать, то ставь "человеческий" компилятор:   Visual C++ или C++ Builder

Offline

#17  31.10.06 19:04

Re: Вопрос в С++ про класса пямяти.

C++ Builder блин более "человеческого" компилятора не видел! Простое приложение типа Hello World весит почти 200 Kb. Если формы и окошки то приятно делать, а что-то писать - извините. Сам начинал на C++ Visual Studio 6.0 очень простой как табуретка и функциональный вдобавок. Если сильно реальное и понтовое программить тогда .NET 2003 или 2005 Enterprise. Тока там сам черт ногу сломит. Я еще не видел человека, который все там юзал. Хотя интерфейс приятный, да и возможности почти безграничные...

Offline

#18  01.11.06 00:19

Re: Вопрос в С++ про класса пямяти.

Укроп написал(а):

Fatboy написал(а):

ибо спецификатор static даже в Си-без-всяких-плюсов присутствовал.

статик на методы афаик стали использовать не сразу

Это не я бляяя...

Offline

#19  01.11.06 00:41

Re: Вопрос в С++ про класса пямяти.

Укроп, открываем книжку "Язык Си" Кернигана и Ричи (между прочим авторы языка!), глава 4.6 "Статические переменные" и видим:

Нормально функции являются внешними объектами, их имена известны глобально. Возможно, однако, объявить функцию как STATIС, тогда ее имя становится неизвестным вне файла, в котором оно описано. В языке "C" "STATIC" отражает не только постоянство, но и степень того, что можно назвать "приватностью". Внутренние статические объекты определены только внутри одной функции,  внешние статические объекты (переменные или функции) определены только внутри того исходного файла, где они появляются, и их имена не вступают в конфликт с такими же именами переменных и функций из других файлов.

:)

Offline

#20  02.11.06 02:01

Re: Вопрос в С++ про класса пямяти.

надо просто убрать дурацкий static, зачем он вообще. Можно приписать куда угодно, на тогда в настройках префиксы всех функций надо поменять с _cdecl на __fastcall, да и вроде если использовать vector или bus [ namespace vector ] можно без заморочек в любом файле сделать static функцию, а когда она нужна - писать system::vector::[ функция ] и никаких притензий от компилятора.

Offline

Программирование и БД » Вопрос в С++ про класса пямяти. 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.141 сек.
Выполнено 14 запросов.