<tipo dela variabile puntata> *<nome della variabile puntatore>;I due operatori '*' di referenziazione' e'&' di dereferenziazione' possono essere visti come complementari.
#include <stdio.h> main(){ int n; int *p; printf(" &p=%lX, p=%lX, *p=%d, \n n=%d, &n=%lX,",&p,p,*p,n,&n); n=100; printf("\n\n &p=%lX, p=%lX, *p=%d, \n n=%d, &n=%lX,",&p,p,*p,n,&n); p=&n; printf("\n\n &p=%lX, p=%lX, *p=%d, \n n=%d, &n=%lX,",&p,p,*p,n,&n); *p=200; printf("\n\n &p=%lX, p=%lX, *p=%d, \n n=%d, &n=%lX.",&p,p,*p,n,&n); }
#include <stdio.h> void scambio(int *x, int *y ) { int temp; temp = *x; *x = *y; *y =temp; } main() { int a,b; printf("a = "); scanf("%d",&a); printf("b = "); scanf("%d",&b); scambio(&a,&b); printf("\n a = %d, b = %d",a,b); }
int n; int *p; n=100; p=&n; n=200; (*p)++; p++; p=&n;
#include <stdio.h> main(){ // viene assegnato un indirizzo, in esadecimale, alla variabile puntatore: char *charp = (char *) 0x0111; int *intp = (int *) 0x0222; printf("charp: %lX, intp: %lX\n",charp, intp); //le variabili puntatore sono incrementate di 1: printf("charp: %lX, intp: %lX\n",charp+1, intp+1); }
#include <stdio.h> main() { int *p, *q; int m,n; printf("*p = "); scanf("%d",&m); p=&m; printf("*q = "); scanf("%d",&n); q=&n; printf("\n*p=%d p=%lX &p=%lX,\n *q=%d q=%lX &q=%lX\n\n",*p,p,&p,*q,q,&q); if(p != q){ if (*p==*q) *p=*q+1; else q=p; printf("*p=%d p=%lX &p=%lX,\n *q=%d q=%lX &q=%lX\n\n",*p,p,&p,*q,q,&q); } }
#include <stdio.h> void main(){ int s[5]; int *p; p=s; for (int i=0; i<5; i++){ *(p+i)=i; } for (int i=0; i<=5; i++){ printf("%d ",s[i]); } printf("\n"); for (int i=0; i<5; i++){ s[i]=i+5; } for (int i=0; i<5; i++){ printf("%d ",p[i]); } printf("\n"); for (int i=0; i<5; i++){ *(p++) += 5; } for (int i=0; i<5; i++){ printf("%d ",s[i]); } p=s; printf("\n"); for ( ; p<&s[4]+2; p++){ printf("%d ",*p); } }Occore quindi fare attenzione nell'uso di vettori, puntatori e anche stringhe: C non fa nessun controllo sulle dimensioni. Col valore sbagliato di un indice, oltre la dimensione riservata nella dichiarazione, vengono sporcate aree contigue in memoria.
Al contrario di un array o di una matrice che occupa in memoria lo spazio necessario per tutti gli elementi, un puntatore occupa solo lo spazio atto a contenere l'indirizzo del primo elemento.
int strLen(char *s){ int lungh=0; while (*s++) lungh ++; return lungh; }