Home > other >  Inserting values to 2D array using pointers
Inserting values to 2D array using pointers

Time:06-14

I successfully entered values to a 2D array without pointers

int main(){ 
    int A[2][3];
    for (int i=0; i<2; i  ){
        for(int j=0; j<3; j  ){
            A[i][j] = 2*i 3*j;
            cout<<" "<<A[i][j]<<" ";

             }
    cout<<endl;
  }
}

And the output is

 0  3  6 
 2  5  8

Then I tried to reach the same outcome with pointers

int main(){

    int A[2][3];
    int (*p)[3] = A;

    for (int i=0; i<2; i  ){
        for(int j=0; j<3; j  ){
             *(*A j)= 2*i 3*j;
             cout<<" "<<*(A[i] j)<<" ";

        }
         cout<<endl;
     }

}

And the output is

0  3  6
32758  1  0

any idea why I got a different result for the second array?

CodePudding user response:

This left operand of the assignment expression

*(*A j)= 2*i 3*j;

does not depend on the index i. In fact it is equivalent to A[0][j]

Thus elements A[1][j] stay uninitialized.

Instead write

for (int i=0; i<2; i  ){
    for(int j=0; j<3; j  ){
         *( *( A   i)   j )= 2*i 3*j;
         cout<<" "<<*(A[i] j)<<" ";

    }
     cout<<endl;
 }

Or with using the declared pointer p the program can look the following way

#include <iostream>

int main()
{
    int A[2][3];
    int (*p)[3] = A;

    for ( int i=0; i < 2; i   )
    {
        for ( int j=0; j<3; j   )
        {
             *( *( p   i )   j ) = 2*i 3*j;
             std::cout << " " << *(A[i] j) << " ";

        }
         std::cout << std::endl;
     }
}

That is the expression *( p i ) is the same as p[i] and the expression *( *( p i ) j ) is the same as p[i][j].

CodePudding user response:

You are not using the pointer correctly. In fact, you are not even using it at all. p is a pointer to the first int[3] in A. You can use the subscript operator ([]) on it to dereference it, just like you do with A.

#include <iostream>

int main() {
    int A[2][3];
    int(*p)[3] = A;

    for (int i = 0; i < 2; i  ) {
        for (int j = 0; j < 3; j  ) {
            p[i][j] = 2 * i   3 * j;             // proper dereferencing
            
            std::cout << ' ' << A[i][j] << ' ';  // verify via `A`
        }
        std::cout << '\n';
    }
}
  • Related