I've learned pointer to pointer.
I am curious about dereferencing after casting "integer to pointer" (char*)(int)
and "void pointer to pointer to char pointer." (char**)(void*)
Now there are some issues when I want to dereference to void pointer to pointer to char pointer.(char**)(void*)
I tried 2 cases.
integer to pointer (char*)(int)
#include <stdio.h>
int main()
{
int a = 10;
int b;
void* ptr = &a;
b = ptr;
printf("%d\n", *(unsigned int*)b);
printf("%d\n", *(void**)(b));
printf("%p\n", *(char**)(b));
return 0;
}
*(unsigned int*)b
*(void**)(b)
*(char**)(b)**
These three read 10 which is in address.
But the code below is problem. (Please watch ptr_speacial)
"void pointer to pointer to char pointer." (char**)(void*)
#include <stdio.h>
int main()
{
int arr[5] = { 1,2,3,4,5 };
char arr2[5] = { 1,2,3,4,5 };
void* ptr_arr;
void* ptr_arr2;
void* ptr_special;
ptr_arr = arr;
ptr_arr2 = arr2;
ptr_special = (char*)ptr_arr2 + 4;
printf("address : %p: value : %d\n", ptr_special, *(char**)ptr_special);
printf("%d\n", *(char**)ptr_arr);
return 0;
}
*(char**)ptr_special
did not read 5 which is in address but -858993659
I'm not sure but I think this is overflow problem. What happend in this case? Please help me!