Описание указателей

Мы уже знаем как описываются переменные, массивы. Как же описать указатель! Сложность в том, что переменные разных типов содержат разное число ячеек, но операции с указателями требуют знания отведенной им памяти. Поэтому, при определении указателя, мы описываем, на какой тип переменной она будет указывать, и что это указатель символ *.

 

int* ptr;

float* pmas;

char* pc;

 

Использование указателей для связи функций

 

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

 

void swap(int*,int*);

void main(void){

int x=5, y=10;

printf ("Прервичные значения х=%d, y=%d\n",x, y);

swap (&x, &y);

printf ("Новые значения х=%d, y=%d\n", x, y);

}

void swap (int*v, int*z){

int u;

u=*v;

*v=*z; //x=y

*z=u;

}

 

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

Вызов swap (x, y); swap (&x, &y);

Определение функции swap (int v, int z); swap (int*v, int*z);

Переменные х, y являются локальными в функции main, но мы, таким образом, можем на них воздействовать в другой функции.

 

Указатели на одномерные массивы

 

Указатели позволяют эффективно работать с массивами. Имя массива представляет собой скрытую форму указателя.

Mas -> &mas[0]; - определяется адрес 1-го элемента массива. Оба выражения являются константными выражениями и не меняются на протяжении работы программы. Их можно присваивать переменной типа указатель.

 

void main(void){

int dates [4], *pti, i;

float bills [4], *ptf;

pti=dates;

ptf=bills;

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

printf ("указатель +%d: %10u и %10u\n", i, pti+i; ptf+i);

}

 

Указатель +0: 56014 56026 - начало адреса массивов.

+1: 56016 56030

+2: 56018 56034

+3: 56020 56038

Прибавляя 1 к указателю, переходим к следующему элементу массива, а не к следующему байту, т.е. смещаемся на длину типа элемента массива.

 

рt pt+1 pt+2 pt+3

 

 

dates+2 <=> &dates[2]

*(dates+2) <=> dates[2]

*dates+2 <=> *(dates)+2

 

//Суммирование элементов массива с использованием указателя.

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

sum+=*(ptm+i);

или

for(i=0;i<10; i++){

sum+=*ptm;

ptm++;

}

или

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

sum+=*ptm++;

 








Дата добавления: 2018-11-25; просмотров: 352;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.