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

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

Примеры.

1. Функция находит максимальный элемент в массиве

int max(int A[][100], int KolStroc, int KolStolb);

Данная функция может вызываться только для массивов, у которых второй размер 100. В противном случае, будет ошибка компиляции.

Например, можно вызвать эту функцию для частично инициализированного массива

int A[][100] = {{1,3,5}, {15,2,3}};

int res = max(A, 2, 3);

2. Функция находит сумму элементов двумерного массива

При передаче двумерного массива здесь использовано явное преобразование типа двумерного массива к типу одномерного массива. Это позволяет вызывать функцию для любых двумерных массивов.

int sum(int A[], int KolStroc, int KolStolb)

{

int s= 0;

for (int i = 0; i < KolStroc; i++)

for (int j = 0; j < KolSolb; j++)

s += A[i* KolSolb + j];

return s;

};

void main()

{

int B[2][3]={{1,4,2}, {4,1,2}};

int res = sum((int *)A, 2, 3);

printf(“%d”, s);

}

Тип и базовый тип указателя

Определение. Указателем называется переменная, объявленная следующим образом

type *имя_указателя;

Определение. Типом указателя называется type*.

Определение. Базовым типом указателя называется тип type данного, на который указывает указатель.

Примеры.

1. Одинарный указатель int *pi имеет тип int* и базовый тип int.

2. Одинарный указатель struct date *pd имеет тип date* и базовый тип date.

3. Двойной указатель float **ppf имеет тип float** и базовый тип float*.

4. Редкий тройной указатель char ***pppc имеет тип char *** и базовый тип char **.

Наиболее часто используются одинарные и двойные указатели, крайне редко тройные указатели. Указатели с 4 звездочками - признак ошибочной ситуации.

Правила определения типа указателей

· Применение к любой переменной name операции взятия адреса &name добавляет к типу результата одну *.

· Применение к любому указателю ptr операции разыменования *ptr удаляет из типа результата одну *.

· Применение к любому указателю ptr операции индексации ptr[0] удаляет из типа результата одну *.

Примеры.

int **ptr; // тип ptr – это int **

// тип *ptr – это int *

// тип **ptr – это int

// выражение ***ptr ошибочно

// тип ptr[0] – это int *

// тип ptr[3][5] – это int

// выражение ptr[1][1][1] ошибочно

// тип *ptr[0] – это int

// тип &(*ptr[0]) – это int*


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: