Рубрики

C | Основы указателя | Вопрос 17

#include<stdio.h>

void fun(int arr[])

{

  int i;

  int arr_size = sizeof(arr)/sizeof(arr[0]);

  for (i = 0; i < arr_size; i++)

      printf("%d ", arr[i]);

}

  

int main()

{

  int i;

  int arr[4] = {10, 20 ,30, 40};

  fun(arr);

  return 0;

(А) 10 20 30 40
(B) Машинно-зависимый
(С) 10 20
(D) Север

Ответ: (Б)
Объяснение: В C параметры массива всегда обрабатываются как указатели. Поэтому следующие два утверждения имеют одинаковое значение.

void fun(int arr[])
void fun(int *arr)

[] используется, чтобы прояснить, что функция ожидает массив, но она ничего не меняет. Люди используют его только для удобочитаемости, чтобы читатель знал о предполагаемом типе параметра. Суть в том, что sizeof никогда не должен использоваться для параметров массива, отдельный параметр для размера (или длины) массива должен быть передан fun (). Таким образом, в данной программе arr_size содержит соотношение размера указателя и целочисленного размера, это соотношение = зависит от компилятора.

#include <stdio.h>

void fun(int arr[], size_t arr_size)

{

  int i;

  for (i = 0; i < arr_size; i++)

      printf("%d ", arr[i]);

}

  

int main()

{

  int i;

  int arr[] = {10, 20 ,30, 40};

  

  // Здесь можно использовать sizeof

  size_t n = sizeof(arr)/sizeof(arr[0]);

  fun(arr, n);

  return 0;

}

Выход:
10 20 30 40

Рекомендуемые посты:

C | Основы указателя | Вопрос 17

0.00 (0%) 0 votes