Показивач (програмирање) — разлика између измена
Садржај обрисан Садржај додат
м Враћене измене 2001:4170:2000:1:0:0:0:31 (разговор) на последњу измену корисника … |
|||
Ред 169:
* показивачи се не смију међусобно сабирати, множити нити дијелити
===
У програмском језику -{C}-, најважније
* пренос аргумената функцији ''по референци''
* имплементација низова
Ред 176:
====Пренос аргумената функцији по референци====
У програмском језику -{C}-, [[функција (програмирање)|функције]] су такве да добијају
Проблеми се јављају, међутим, у случајевима када желимо да функција ипак
Погледајмо
-{<source lang="c">
void povecaj(int c )
Ред 195:
}
</source>}-
Из претходног параграфа закључујемо да функција <code>povecaj</code> неће извршити своју улогу јер на
* функција <code>povecaj</code> треба да се прилагоди тако да прихвата адресу цјелобројне промјенљиве, а не њу саму
* када добије адресу, дереференцираће је и повећати оно што се налази на тој адреси за <code>1</code>
* функција <code>main</code> треба да пошаље адресу од <code>x</code>, а не сāмо <code>x</code>
Погледајмо како изгледа резултат
-{<source lang="c">
void povecaj(int * pc )
Ред 223:
int a[10];
</source>}-
тада настаје <code>10</code> елемената низа (који ниједан нема своје право име), и једна показивачка
Низови се у -{C}--у имплементирају преко показивача захваљујући специфичној показивачкој аритметици. Ако је <code>a</code> показивач на први елемент низа, онда <code>*a</code> представља сам елемент. Даље, пошто показивачка аритметика диктира да <code>a+1</code> буде показивач на сљедећи елемент низа, онда ће <code>*(a+1)</code> представљати сам други елемент низа. Идући даље,
Ако идемо даље, и представимо матрицу реалних бројева <code>М</code> димензија <code>m x n</code>, тада је стање у меморији сљедеће:
* <code>M</code> представља показивач на први елемент низа од <code>m</code> показивача.
* сваки од <code>m</code> показивача показује на по први елемент низа од <code>n</code> реалних бројева (
[[Слика:MatrixPointer.png|десно|мини|Скица уређења вишедимензионалног низа (матрице) у меморији]]
Када користимо статичке декларације низова, оваква стања меморије се формирају аутоматски, али је такође могуће формирати их ручно, користећи обичну декларацију показивача и неку од уграђених -{C}--ових функција за алоцирање меморије.
-{<source lang="c">
char ** alocirajMatricu(int m, int n )
|