let consider the following fragment of Code:
#include<stdio.h>
main()
{
int count[100][10];
*(count + (44*10)+8)=99;
printf("%d",count[44][8]);
}
What is the wrong with it?
let consider the following fragment of Code:
#include<stdio.h>
main()
{
int count[100][10];
*(count + (44*10)+8)=99;
printf("%d",count[44][8]);
}
What is the wrong with it?
count[44][8]
is not initialized and you are trying to print the value of it which is UB.
a[i][j] = *(a[i] + j);
a[i][j] = *(*(a+i) + j);
So if you want to initialize count[44][8] then do
*(count[44] + 8) = 10; /* or *(*(count + 44) + 8) = 10 */
printf("%d",count[44][8]);
Array-to-pointer decay only works for one level; so int count[100][10]; decays to int (*)[100] (Why does int*[] decay into int** but not int[][]?).
You can either cast count to int* or use &count[0][0] to get an int* pointer to the first element of the 2D array.
*(count + (44*10)+8)=99; should be
*(count[0] + (44*10)+8)=99;
Type of countp[0] can be reinterpreted as int * as you want.
Type of count is int [100][10] so adding some big number to it would go 10 times ahead as you want and access to that location would lead to UB.
Anopter way to write the same is:
*( *(count + 44) + 8 )=99;