Qubc
@Qubc
Ненавижу полисемию.

Передача массива в функцию?

void printMAS (int A[])
{
	printf ("%d\n", A[1] );//не суть
}

int main (void)
{
	int MAS[] = {0,1,2,3,4};
	printMAS (MAS);//The name of the array evaluates to the address of the first element of the array.
	printMAS (&MAS[0]);//не будет ошибкой!
	printMAS (&MAS);//будет ошибкой! Почему?
}

Вот такие инструкции же работают...

printf ("%p\n", MAS] );
printf ("%p\n", &MAS );
printf ("%p\n", &MAS[0] );

scanf ("%d", MAS] );
scanf ("%d", &MAS );
scanf ("%d", &MAS[0] );
  • Вопрос задан
  • 393 просмотра
Пригласить эксперта
Ответы на вопрос 3
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
printMAS (&MAS);//будет ошибкой! Почему?

Будет ошибкой только с точки зрения соответствия типов, потому что тип выражения &MAS -- int (*)[5]. Значение же адреса будет одним и тем же.

Вот такие инструкции же работают...

Потому что значение адреса передаётся в них через ... и интерпретируется внутри как void *, т.е. тип исходного адреса больше не имеет значения.
Ответ написан
@LASHKOAG
Си, Робототехника, Linux, Телеметрия, Разработчик
https://metanit.com/cpp/tutorial/4.5.php

#include <stdio.h>

void printMAS (int *, int); // это для компилятора или для "имя_файла.h"

void printMAS (int *ptrA, int countptrA){          
    //передаем массив по указателю и количество элементов
  printf ("ptrA[1] = %d\n\n", ptrA[1] );//не суть

  for (int i=0; i<countptrA; ++i){
    printf ("ptrA[%d] = %d\n",i, ptrA[i] );
  }
}

int main(){
  int B[]={5,9,10,200,500};

  printf ("(sizeof(B)/sizeof(B[0])) = %d\n\n", (sizeof(B)/sizeof(B[0])) );
  printMAS(B,(sizeof(B)/sizeof(B[0])));
  return 0;
}
Ответ написан
Комментировать
CityCat4
@CityCat4
//COPY01 EXEC PGM=IEBGENER
Передача массива по значению - неэффективна. Я вот не могу вспомнить ни одного случая, когда это реально было нужно. Обычно передают по ссылке. Иногда еще передают количество элементов, иногда закладывают лишний элемент-ограничитель, который маркирует конец массива.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы