пользователей: 21228
предметов: 10455
вопросов: 177496
Конспект-online
зарегистрируйся или войди через vk.com чтобы оставить конспект.
РЕГИСТРАЦИЯ ЭКСКУРСИЯ


Взаимосвязь между массивами и указателями. Массивы как аргументы функций

Массивы и указатели в Си тесно связаны и могут быть использованы почти эквивалентно. Имя массива можно понимать как константный указатель на первый элемент массива. Его отличие от обычного указателя только в том, что его нельзя модифицировать. 

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

Между именем массива и соответствующим указателем есть одно важное различие. Указатель - это переменная и у = а или y++ - допустимые операции. Имя же массива - константа, поэтому конструкции вида a = y, a++ использовать нельзя, так как значение константы постоянно и не может быть изменено.

 В языке Си имя массива - это адрес памяти, начиная с которой расположен массив, то есть адрес первого элемента массива. Если объявлен целочисленный массив int m[25] , то m является указателем на массив. Поэтому написать в программе 
p=m; или 
p=&m[0] 
это одно и то же, так как первая и вторая команды дают одно и то же число - адрес первого элемента массива m[25]. Для того, чтобы обратиться к 11-му элементу массива m, можно написать m[10] или *(m+10). Результат должен быть одним и тем же. 

Преимущество использования способа *(p+10) состоит с том, что арифметические операции над указателями выполняются быстрее, если Вы работаете с подряд идущими элементами массива. 


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

Важно понять, что при использовании массива в качестве аргумента функции происходит передача в функцию его адреса. Это означает, что код внутри функции действует и может изменять настоящее значение массива, используемого при вызове. 

Если двумерный массив создан динамически, то можно передавать указатель на указатель. 


13.06.2016; 18:58
хиты: 2
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2016. All Rights Reserved. помощь