PROBLEMA stampare il valore deferenziato del puntatore di puntatore ad intero

davidson

Nuovo Utente
33
5
Codice:
#include<stdio.h>
#include<stdlib.h>
                int main()
            {   

                int dim;

                printf("inserisci la dimensione dell'array");

                scanf("%d",&dim);

                int a[dim];

                int **p;

                int *c;

                int i;


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


                    printf("il valore dell'array[%d] = ",i);


                    scanf("%d",&a[i]);


                }



                //posso scrivere anche  c= &a[0] è la stessa cosa dato che un array e' un puntatore//
                c =&a[0];

                    // al  puntatore di puntatore **p gli si  deve avere passare l'indirizzo di memoria del puntatore e
                    // non il contenuto di p che contiente l'indirizzo di memoria di a[0], un indirizzo di memoria diverso
                    // dall'indirizzo di puntatore di tipo intero
       
                p = &c;

               
                for( ;(**p);(**p)++)

                {

                printf("i  valori del puntatore di puntatore che punta all'array sono %d",(**p));
           
               
                }
               
                           
                return 0;
            }


Quello che vorrei fare è stampare i valori dell'array utilizzando il puntatore di puntatore
 

Marcus Aseth

Utente Attivo
404
138
OS
Windows 10
se ho capito cosa stai chiedendo, in C++ una roba del genere:

C++:
#include <iostream>
using namespace std;

int main()
{
    const int size = 5;
    int arr[size] = { 1,2,3,4,5 };

    int* pArray = arr;
    int** ppArray = &pArray; // pointer a pointer

    for (int i = 0; i < size; i++)
    {
        cout << *((*ppArray)+i) << " "; // <---questo
    }
    cout << endl;
    return 0;
}

"*((*ppArray)+i) " basta che leggi le parentesi dall'interno all'esterno, quindi dereference di ppArray per tornare al pointer originale (primo elemento dell'array), incrementi la posizione con 'i' e dereference di nuovo per leggerne il contenuto a quella posizione

Oppure per scriverlo in maniera piu compatta e leggibile, puoi rimpiazzarlo con:
C++:
(*ppArray)[i]
perchè il subscript operator (parentesi quadre) si occupa di avanzare il puntatore e fare dereference tutto in un colpo solo (che di fatto è quello che stai facendo quando usi un'array nel modo classico).
 
Ultima modifica:

davidson

Nuovo Utente
33
5
se ho capito cosa stai chiedendo, in C++ una roba del genere:

C++:
#include <iostream>
using namespace std;

int main()
{
    const int size = 5;
    int arr[size] = { 1,2,3,4,5 };

    int* pArray = arr;
    int** ppArray = &pArray; // pointer a pointer

    for (int i = 0; i < size; i++)
    {
        cout << *((*ppArray)+i) << " "; // <---questo
    }
    cout << endl;
    return 0;
}

"*((*ppArray)+i) " basta che leggi le parentesi dall'interno all'esterno, quindi dereference di ppArray per tornare al pointer originale (primo elemento dell'array), incrementi la posizione con 'i' e dereference di nuovo per leggerne il contenuto a quella posizione

Oppure per scriverlo in maniera piu compatta e leggibile, puoi rimpiazzarlo con:
C++:
(*ppArray)[i]
perchè il subscript operator (parentesi quadre) si occupa di avanzare il puntatore e fare dereference tutto in un colpo solo (che di fatto è quello che stai facendo quando usi un'array nel modo classico).
graziee
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili