void main()
{
char str[2][7] = {"1234567", "abcdefg"};
char** p = str;
printf("%d\n", *(p+1));
printf("%c\n", *(p+1));
}
The output is:
1631008309
5
Edit: Thank you. I see the ‘5’ is only 0x35, other than str[0][4] I supposed to be. Why can’t I get out str[0][4] instead of this strange 1631008309??
OMG, I’m foolish enough to ask this question! Thank you all, guys.
You’re pointing a char** at the beginning of the memory allocated to your 2-d array.
When you add 1 to a pointer it moves you along by the sizeof the type pointed to, in this case the sizeof a char *, which is evidently 4 bytes in your system. Then you’re dereferencing it and treating the result as an int (%d), which gives you the a765 I mentioned in my comment to unwind. When you dereference it and treat it as a char you correctly get 5.
[I see that unwind has deleted their answer, so just for completeness I’ll add that the “a765” is the ASCII interpretation of the larger number you get (0x61373635).]