I have this very simple test function that I'm using to figure out what's going on with the `const` qualifier.

```
int test(const int* dummy)
{
   *dummy = 1;
   return 0;
}

```

This one throws me an error with GCC 4.8.3.
Yet this one compiles:

```
int test(const int* dummy)
{
   *(char*)dummy = 1;
   return 0;
}

```

So it seems like the `const` qualifier works only if I use the argument without casting to another type.

Recently I've seen codes that used

```
test(const void* vpointer, ...)

```

At least for me, when I used `void *`, I tend to cast it to `char` for pointer arithmetic in stacks or for tracing. How can `const void` prevent subroutine functions from modifying the data at which `vpointer` is pointing?