Che cosa � pointer?
|
In c, un pointer� una variabile che indica a o riferisce una posizione di memoria in cui i dati sono memorizzati. Nel calcolatore, ogni cellula di memoria ha un indirizzo che pu� essere usato per accedere a quella posizione in modo da ai punti di variabile di pointerad una posizione che di memoria possiamo accedere a e che cambiamo il contenuto di questa posizione di memoria via l'pointer.
|
Dichiarazione dell'pointer:
|
Un pointer� una variabile che contiene la posizione di memoria di un'altra variabile nei dati dello shich � immagazzinata. Usando l'pointer, cominciate specificando il tipo di dati memorizzati nella posizione. L'asterisco contribuisce a dire al compilatore a che stiate generando una variabile di pointer. Infine dovete dare il nome della variabile. La sintassi � come indicata sotto.
|
|
Il seguente esempio illustra il declataion della variabile di pointer
|
|
Operatore di indirizzo:
|
Una volta che dichiariamo una variabile di pointerallora dobbiamo indicarli a qualcosa che possiamo fare questo assegnando all'pointerl'indirizzo della variabile desiderate indicare come nel seguente esempio:
|
|
Il suddetto codice dice a che l'indirizzo dove numerico sia depositi nello stampante variabile. Lo stampante variabile ha il valore 21260, se numerico � immagazzinato nell'indirizzo di memoria 21260 allora
|
Il seguente programma illustra la dichiarazione dell'pointer
|
/* A program to illustrate pointer declaration*/
main()
{
int *ptr;
int sum;
sum=45;
ptr=&sum
printf ("\n Sum is %d\n", sum);
printf ("\n The sum pointer is %d", ptr);
}
|
|
Espressioni dell'pointer& aritmetica dell'pointer:
|
Nelle espressioni, come altre variabili di pointerdi variabili pu� essere usato. Per esempio se p1 e p2 sono inizializzati correttamente ed pointers dichiarati, allora le seguenti dichiarazione sono valide. |
y=*p1**p2;
sum=sum+*p1;
z= 5* - *p2/p1;
*p2= *p2 + 10;
|
|
La C permette che noi sottraiamo i numeri interi a o aggiungiamo i numeri interi dagli pointers cos� come per sottrarre un pointerdall'altro. Possiamo anche usare gli operatori corti della mano con gli pointers p1+=; sum+=*p2; ecc., usando gli operatori relazionali, possiamo anche confrontare gli pointers come le espressioni quale p1 >p2, p1==p2 e p1! =p2 sono permessi.
|
Il seguente programma illustra l'espressione dell'pointere l'aritmetica dell'pointer
|
/*Program to illustrate the pointer expression and pointer arithmetic*/
#include< stdio.h >
main()
{
int ptr1,ptr2;
int a,b,x,y,z;
a=30;b=6;
ptr1=&a;
ptr2=&b;
x=*ptr1+ *ptr2 6;
y=6*- *ptr1/ *ptr2 +30;
printf("\nAddress of a +%u",ptr1);
printf("\nAddress of b %u",ptr2);
printf("\na=%d, b=%d",a,b);
printf("\nx=%d,y=%d",x,y);
ptr1=ptr1 + 70;
ptr2= ptr2;
printf("\na=%d, b=%d,"a,b);
}
|
|
pointers e funzione:
|
In una dichiarazione di funzione, l'pointermolto � usato. A volte, soltanto con un pointeruna funzione complessa pu� essere rappresentata facilmente e successo. In una definizione di funzione, l'uso degli pointers pu� essere classificato in due gruppi.
- Call by reference
- Call by value.
|
Chiamata da valore:
|
Abbiamo visto che ci sar� un collegamento stabilito fra i parametri convenzionali e reali quando una funzione � invocata. Non appena l'immagazzinaggio provvisorio � generato dove il valore dei parametri reali � memorizzato. I parametri convenzionali prende il relativo valore da deposito il meccanismo del trasferimento di dati fra convenzionale ed i parametri reali permette il meccanismo di parametri reali del trasferimento di dati si riferisce come chiamata da valore. Il parametro convenzionale corrispondente rappresenta sempre una variabile locale nella funzione denominata. Il valore corrente del parametro reale corrispondente si trasforma in nel valore iniziale del parametro convenzionale. Nel corpo del parametro reale, il valore del parametro convenzionale pu� essere cambiato. Nel corpo del subprogram, il valore del parametro convenzionale pu� essere cambiato dalle dichiarazione dell'input o di assegnazione. Ci� non cambier� il valore dei parametri reali.
|
/* Include< stdio.h >
void main()
{
int x,y;
x=20;
y=30;
printf("\n Value of a and b before function call =%d %d",a,b);
fncn(x,y);
printf("\n Value of a and b after function call =%d %d",a,b);
}
fncn(p,q)
int p,q;
{
p=p+p;
q=q+q;
}
|
|
Chiamata da riferimento:
|
L'indirizzo dovrebbe essere pointers, quando passiamo ad indirizzo ad una funzione la ricezione di parametri. Usando gli pointers, il processo di chiamata della funzione per passare l'indirizzo della variabile � conosciuto come chiamata da riferimento. La funzione che � denominata da riferimento pu� cambiare il valore della variabile usata nella chiamata.
|
/* example of call by reference*?
/* Include< stdio.h >
void main()
{
int x,y;
x=20;
y=30;
printf("\n Value of a and b before function call =%d %d",a,b);
fncn(&x,&y);
printf("\n Value of a and b after function call =%d %d",a,b);
}
fncn(p,q)
int p,q;
{
*p=*p+*p;
*q=*q+*q;
}
|
|
pointeragli arrays:
|
un allineamento � realmente molto simile come l'pointer. Possiamo dichiarare poich� il *a interno � un indirizzo, perch� a [0] il primo elemento di arrays come a [0] e il *a � inoltre un indirizzo la forma della dichiarazione � inoltre equivalente. La differenza � pointerpu� comparire a sinistra dell'operatore di assegnazione ed � a � una variabile che � lvalue. Il nome di allineamento non pu� comparire come la parte di sinistra dell'operatore di assegnazione ed � costante.
|
/* A program to display the contents of array using pointer*/
main()
{
int a[100];
int i,j,n;
printf("\nEnter the elements of the array\n");
scanf(%d,&n);
printf("Enter the array elements");
for(I=0;I< n;I++)
scanf(%d,&a[I]);
printf("Array element are");
for(ptr=a,ptr< (a+n);ptr++)
printf("Value of a[%d]=%d stored at address %u",j+=,*ptr,ptr);
}
|
|
pointers e strutture
|
Sappiamo che il nome dei basamenti di allineamento per l'indirizzo del relativo elemento dello zeroth lo stesso concetto fa domanda per i nomi degli arrays delle strutture. Supporre che l'articolo � una variabile di allineamento del tipo dello struct. Considerare la seguente dichiarazione:
|
struct products
{
char name[30];
int manufac;
float net;
item[2],*ptr;
|
|
questo stampante di dichiarazione come oggetti di dati dell'pointerdi tipo prodotti dello struct e dichiara l'articolo come allineamento di due elementi, ogni tipo prodotti dello struct.
|
pointers sull'pointer
|
Un pointercontiene il valore dell'immondizia fino a inizializzarlo esso. Poich� i compilatori non possono rilevare gli errori non possono essere conosciuti fino a che non eseguiamo il programma ci ricordiamo di che anche se possiamo individuare un risultato errato, uninitialized o scorrettamente avuto inizializzato gli pointers che non pu� fornire alcuna prova per noi ai problemi sospetti in pointers. Per esempio le espressioni come
|
*ptr++, *p[],(ptr).member
|
|
Keywords:
Pointers in C,
double pointers in c,
pointers in c language,
pointer in c,
pointers in c++,
function pointers in c,
function pointer in c,
using pointers in c,
data types in c,
array of pointers in c,
pointers in c#,
pointer to pointer in c,
pointer to a pointer in c,
pointers to functions in c,
file pointer in c,
file pointers in c
|