A char is the smallest addressable unit, you can't go any lower than that in C/C++.
Printing the value that puntBool holds:
for(unsigned int i = 0; i < (sizeof(int) * 8); i++)
{
//printf("%d", (*puntBool ? 1 : 0));
printf("%p\n",puntBool++);
}
gives me:
0xbfbb7d80
0xbfbb7d81
0xbfbb7d82
0xbfbb7d83
0xbfbb7d84
0xbfbb7d85
0xbfbb7d86
0xbfbb7d87
0xbfbb7d88
0xbfbb7d89
0xbfbb7d8a
0xbfbb7d8b
So, you bool*
is esentially acting as a char*
and that's why your result is not as expected.