Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

What is the use of i in `printf("%d\n",(a->ptr)[i]);`?

Hey guys I am currently learning DSA and in ADT I have a problem:
This is a code that creates a custom array and takes the input of the array and stores it and prints it too but I want to ask that what does that [i] do in printf("%d\n",(a->ptr)[i]); that thing is what I am not getting in this code

#include<stdio.h>
#include<stdlib.h>

struct myArray{
    int total_size;
    int used_size;
    int *ptr;
};

void createArray(struct myArray * a,int tSize,int uSize)
{
    a->total_size = tSize;
    a->used_size = uSize;
    a->ptr = (int *) malloc(tSize * sizeof(int));
}

void show(struct myArray * a){
    for(int i=0; i < a->used_size; i++){
        printf("%d\n",(a->ptr)[i]);
    }
}

void setVal(struct myArray * a){
    int n;
    for(int i=0; i < a->used_size; i++){
        printf("Enter Element %d: ", i);
        scanf("%d",&n);
        (a->ptr)[i] = n;
    }
}

int main(){
    struct myArray marks;
    createArray(&marks,10,2);
    printf("We are running setVal now\n");
    setVal(&marks);

    printf("We are running show now\n");
    show(&marks);
    return 0;
}

>Solution :

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

The data member ptr points to a dynamically allocated array

a->ptr = (int *) malloc(tSize * sizeof(int));

To access elements of the array you can use the subscript operator

 printf("%d\n",(a->ptr)[i]);

To make it more clear consider the following code snippet.

enum { N = 10 };
int *ptr = malloc( N * sizeof( int ) );
for ( int i = 0; i < N; i++ )
{
    ptr[i] = i;
}

The difference with the original code is the pointer ptr is a data member of a structure and to access ptr using a pointer to an object of the structure type you have to change in the code above the expression

ptr[i]

to

( a->ptr )[i]

that is the same as

a->ptr[i]

because there are used the postfix operator -> and [] that evaluates left to right.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading