Home > Software design >  Why is this printing the memory location of array elements of second and third arrays?
Why is this printing the memory location of array elements of second and third arrays?

Time:11-27

char model[10][15] = {"Honda","Audi","Ferrari","Jeep","Toyota","Bugatti","Ford","Jensen","Porsche","Suzuki"};
int price[10][15] = {750000,650000,950000,300000,900000,1000000,400000,750000,300000,800000};
int remain[10][15] = {3,4,5,3,3,7,8,2,1,2,2};

for(i=0;i<11;i  ){
            printf("\n%s\t %d\t %d\t",model[i],price[i],remain[i]);
        }

I tried all sorts of things but nothing worked... I'm a new C programmer (just jumped from JAVA)

CodePudding user response:

Because you are declaring your arrays wrong.

char *model[11] = {"Honda","Audi","Ferrari","Jeep","Toyota","Bugatti","Ford","Jensen","Porsche","Suzuki"};
int price[11] = {750000,650000,950000,300000,900000,1000000,400000,750000,300000,800000,9000};
int remain[11] = {3,4,5,3,3,7,8,2,1,2,2};

CodePudding user response:

model is an array of 10 arrays of 15 char.

Therefore model[i] is one of those 10 arrays; it is an array of 15 char.

When an array is used in an expression other than as the operand of sizeof or unary & or as a string literal used to initialize an array, it is automatically converted to a pointer to its first element. Therefore, using model[i] as an argument to printf passes a pointer to the first element of the array model[i].

With %s, printf expects a pointer to a char, and it prints the string of characters it finds starting at that location in memory. So passing model[i] passes a pointer which works with %s.

price is an array of 10 arrays of 15 int.

Therefore price[i] is one of those 10 arrays; it is an array of 15 int.

Passing price[i] to printf passes a pointer to the first element of the array price[i].

With %d, printf expects an int value, not a pointer, so passing price[i] does not work.

Instead, you want price to be an array of 10 int. Then price[i] will be an int, not an array of int. To do that, change the definition:

int price[10] = {750000,650000,950000,300000,900000,1000000,400000,750000,300000,800000};
int remain[10] = {3,4,5,3,3,7,8,2,1,2,2};

Then passing price[i] to printf will pass an int, not a pointer.

  • Related