Wednesday, March 6, 2013

8. C අටවන පාඩම - Pointers (දර්ශකයන්)


මෙම ලිපියෙන් මම බලාපොරොත්තු වෙන්නෙ C භාෂාවේ භාවිතා වන වැදගත් යෙදුමක් වන දර්ශක (Pointers) පිළිබදව විස්තර කිරීමටයි. 

Pointer (දර්ශක) යනු මතක ගබඩාවේ ලිපිනයන් (Memory location address) සමග ගනුදෙනු කිරීමට C හි භාවිතා වන යෙදුමයි. මෙය භාවිතයෙන් ඉතා පහසුවෙන් memory location වෙත ගමන් කල හැකි අතර ඒවායෙහි ගබඩා කර ඇති values කියවීම, වෙනස් කිරීම ආදිය pointers භාවිතයෙන් පහසුවෙන් සිදු කර ගත හැක. 


දර්ශක භාවිතයේදී පෙරදී භාවිතා නොකල අලුත් කාරක රීති (Syntax) භාවිතා කිරීමට සිදුවේ. මන්ද මෙහිදි අපට මතක ගබඩාවේ ලිපිනයටත්, ගබඩා වී ඇති දත්ත අගයටත් (Memory location address and Value) යන දෙකම ලබාගත යුතු බැවින්. 

දර්ශක හදුන්වාදීමේදී එය pointer ආකාරයේ විචල්‍යක් බවත් එහි ගබඩා කළ හැකි දත්ත ආකාරය (Data type) කුමක්ද යන වගත් compiler එකට දැන්විය යුතුය. පහත දැක්වෙන්නෙ pointer variable එකක් declare කරන ආකාරයයි. 

<variable_type> *<name>; 

උදාහරණයක් ලෙස Integer ආකාරයේ විචළ්‍ය දර්ශකයක් හදුන්වාදෙන ආකාරය සලකා බලමු.

int *Number; 

මෙහි දැකිය හැකි * (තරු/star) ලකුණින් හැගවෙන්නේ මෙම විචල්‍ය දර්ශකයක් බවයි.

සාමාන්‍ය විචල්‍යකින් මතක ගබඩා ලිපිනය(Memory location address) එක ලබා ගැනීම.

සමාන්‍ය විචල්‍යකින් memory location address එක ලබාගැනීමට C ක්‍රමලේඛනයේදී '&' සංකේතය භාවිතා කරයි.

int Number= 5;
int *p = &Number; 

ඉහත උදාහරණය සලකන්න එහි මුලින්ම Integer ආකාරයේ Number විචල්‍යට අගය 5ක් ලෙස යොදා ඇත. දෙවනිව Integer ආකාරයේ p නම් පොයින්ටර් විචල්‍යකට &Number අගය ඇතුලු කර ඇත. මෙහිදී සිදුවන්නේ p හි අගය ලෙස Number විදල්‍යයේ Memory location address එක assign වේ. 

පොයින්ටර් විචල්‍යකින් එහි මතක ගබඩාවේ අගය ලබා ගැනීම.

පොයින්ටර් විචල්‍යක් භාවිතයෙන් එහි ගබඩා කර ඇති ලිපිනයේ අඩංගු අගය ලබාගන්නා ආකරය දැන් අපි බලමු.



printf("%d", *p);


ඉහත උදාහරණයේ ආකාරයට *p ලෙස භාවිතා කිරීමෙන් අපට පොයින්ටරයේ අඩංගු අගය කෙලින්ම ලබාගත හැක.

ඉහත සාකඡ්චාකල දෑ සැකෙවින් පහදා ගැනීමට පහත උදාහරණය උත්සාහ කරන්න.


#include <stdio.h>

void main(){
    int x;            /* A normal integer*/
    int *p;           /* A pointer to an integer ("*p" is an integer, so p
                       must be a pointer to an integer) */

    p = &x;           /* Read it, "assign the address of x to p" */
    printf("Enter value:");
    scanf( "%d", &x );          /* Put a value in x, we could also use p here */
    printf( "Value of pointer is %d\n", *p ); /* Note the use of the * to get the value */
    printf( "Memory address is %d\n", p ); /*Display memory address from pointer */
    printf( "Memory address of x is %d\n", &x ); /*Use of & to get memory address */
    printf( "Value of x is %d\n", x ); 
}

මෙමගින් Pointer (දර්ශක) විචල්‍ය ගැන අවබෝධයක් ලබාගන්නට හැකිවන්නට ඇතැයි සිතමි. දර්ශක විචල්‍යද C හි භාවිතා වන තවත් විචල්‍ය ආකාරයකි.C හිදී එමගින් Memory location එක සමග ගණුදෙනු කිරීමට ක්‍රමලේඛකයාට අවකාශය ලබාදෙයි.

3 comments:

  1. ඇත්තටම ඉතා සරලව ලියලා තියෙනවා මම හරි කැමතියි ඒකට.මීලග පාඩමත් මම ඉක්මනටම බලාපොරොත්තු වෙනවා.

    ReplyDelete
  2. හොඳයි...අනිත් කොටසත් ඉක්මනටම දාන්න...(y)

    ReplyDelete
  3. ස්තූතියි සහොදරවරුනි. ඉක්මනටම ඊලඟ එක දෙන්නම්.

    ReplyDelete