Using void pointer to an array

后端 未结 4 1806
逝去的感伤
逝去的感伤 2021-01-01 02:20

I was just trying to use a void pointer to an integer array ,I tried to see if i can print the array back by casting it back into int. But it is giving me some random value.

相关标签:
4条回答
  • 2021-01-01 02:51

    You need to cast arr before adding j. Here is a minimal fix:

    x = *(((int *)arr)+j);
    

    but I think it's clearer to write:

    x = ((int *)arr)[j];
    
    0 讨论(0)
  • 2021-01-01 02:52

    you should not add numbers to void pointers. cast it before. (x = *((int *)arr+j);)

    When you add number to a pointer, the compiler multiply this number with the size of the type that is pointed, so if you add number to a pointer to wrong type, you will get wrong result.

    if I remember correct, add to void* is illegal, but some compilers adds the exact number in bytes (like it is char*). `

    0 讨论(0)
  • 2021-01-01 02:54

    You are doing pointer arithmetic on void * which is not valid in C.

    In GNU C (C with gcc extensions), it is actually permitted and the sizeof (void) is considered to be 1.

    http://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html

    "addition and subtraction operations are supported on pointers to void and on pointers to functions. This is done by treating the size of a void or of a function as 1."

    0 讨论(0)
  • 2021-01-01 02:58

    The C standard does not define behaviour for arithmetic of void *, so you need to cast your void * to another pointer type first before doing arithmetic with it.

    Some compilers [as an extension] treat pointer arithmetic of void * the same as char *, so each ‘+1’ will only increase the address by 1, rather than by the size of the pointed-to object. This is not standardised though so you can't rely on this behaviour.

    0 讨论(0)
提交回复
热议问题