Помощь - Поиск - Пользователи - Календарь
Полная версия: основы языка С
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Другие языки
Tan
Доброго времени суток! У меня следующий вопрос : имеются 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я функция и с войдом выводила!
volvo
Цитата
Но только верхняя выводит надпись hello.
blink.gif У меня обе (после исправления строки

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

Как вызываешь покажи....
Tan
MyFunc (mas1, mas2);
void MyFunc2 (int* mas1, int* mas2);

Сначала пробовал 2ю без войда, но компилятор выдал ошибку.
volvo
Это не вызов... Ты полностью main() приведи...
Tan
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();
 }
volvo
А сам не догадываешься, что происходит?

Я же говорю, это - не вызов... Это - 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.
Tan
Спасибо, сейчас буду рзбираться! Но ведь указатель на 0 элемент это и есть имя масива ? Я наверно не догоняю как указатели как параметры передавать.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.