IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> основы языка С
сообщение
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


Доброго времени суток! У меня следующий вопрос : имеются 2 функции
 int MyFunc(int mas1[M][N], int mas2[M])
{
register i, j;
int max;
for (i = 0; i != M; i++)
{
max = mas1[0][j];
for (j = 0; j != N; j++) if ( max < mas1[i][j] ) max = mas1[i][j];
mas2[i] = max;

}
printf ("Hello");
return mas2[M];
}
void MyFunc2 (int* mas1, int* mas2)
{
register i, j;
int max;
for (i = 0; i != N; i++)
{
max = *(mas1 + i);
for (j = 0; j != M; j++)
if ( max < *(mas1 + i * M + j) ) max = *(mas1 + i * M + j);
}
*(mas2 + M) = max;
printf ("Hello");
}

Но только верхняя выводит надпись hello. Просто баловался, проверял всякие мелочи и тут обнаружил такую интересную вещь. отличие лишь в том, что одна работает с указателями, а вторая с индексами массива. Так почему же вторая функция не выводит надпись ? Я сначала думал, что причина в войде но 1я функция и с войдом выводила!

Сообщение отредактировано: Tan -


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Но только верхняя выводит надпись hello.
blink.gif У меня обе (после исправления строки

  max = mas1[0][j]; // <--- Здесь должно быть i
) выводят...

Как вызываешь покажи....
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


MyFunc (mas1, mas2);
void MyFunc2 (int* mas1, int* mas2);

Сначала пробовал 2ю без войда, но компилятор выдал ошибку.


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Это не вызов... Ты полностью main() приведи...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


void main()
{
int i ,j, mas1[M][N], mas2[M];
int MyFunc (int mas1[M][N], int mas2[M]);
void MyFunc2 (int* mas1, int* mas2);
clrscr();
randomize();
for (i = 0; i != M ; i++)
{
printf("\n");
for (j = 0; j != N ; j++)
{
mas1[i][j] = random(10);
printf("%4d", mas1[i][j]);
}
}
MyFunc (mas1, mas2);
for (i = 0; i != M; i++) printf("%3d", mas2[i]);
void MyFunc2 (int* mas1, int* mas2);
for (i = 0; i != M; i++) printf("%3d", mas2[i]);
getch();
}


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






А сам не догадываешься, что происходит?

Я же говорю, это - не вызов... Это - function declaration: предварительное описание функции... Пройдись дебаггером - эта строчка просто не принимается во внимание, и не выполняется...

Чтобы выполнялась - тебе надо сделать что-то такое:
...
MyFunc (mas1, mas2);
for (i = 0; i != M; i++) printf("%3d", mas2[i]);
MyFunc2 (mas1[0], mas2); // <--- Чувствуешь разницу?
for (i = 0; i != M; i++) printf("%3d", mas2[i]);
getch();
...

Кстати, функции не совсем равнозначны: в первой изменяется весь массив mas2, а во второй - только один элемент... Поэтому может понадобиться корректировка MyFunc2.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


Спасибо, сейчас буду рзбираться! Но ведь указатель на 0 элемент это и есть имя масива ? Я наверно не догоняю как указатели как параметры передавать.

Сообщение отредактировано: Tan -


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.10.2020 17:09
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name