Mail Archives: djgpp/2001/10/13/05:34:14
From: | "Graham Warren" <Moosehead AT tesco DOT net>
|
Newsgroups: | comp.os.msdos.djgpp
|
Subject: | Puzzling pointer behaviour
|
Date: | Sat, 13 Oct 2001 10:22:21 +0100
|
Organization: | Tesco ISP
|
Lines: | 50
|
Message-ID: | <9q90qi$lfl$1@barcode.btinternet.com>
|
NNTP-Posting-Host: | 212.140.70.28
|
X-Newsreader: | Microsoft Outlook Express 4.72.3110.1
|
X-MimeOLE: | Produced By Microsoft MimeOLE V4.72.3110.3
|
To: | djgpp AT delorie DOT com
|
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp
|
Reply-To: | djgpp AT delorie DOT com
|
Hello,
Thankyou to all who have helped me in the past.
I've come across something slightly strange about byte pointers. Can anyone
explain this. This small program demonstrates my query. When a byte pointer
is made to point to an long int pointer, it actually points to the 8 least
significant bits of the long int. Also, when this byte pointer is
incremented it points 'left' of its original position. Why is this?
/* POINTER.C */
#include <stdio.h>
int main (void)
{
int j;
unsigned long int dword1 = 0; /* set a 32-bit int to
zero */
unsigned long int *ptr_dword1 = &dword1; /* make a pointer to it */
unsigned char *ptr_byte1;
ptr_byte1 = (unsigned char *) ptr_dword1; /* make ptr_byte1 point to the
32-bit int */
*ptr_byte1 = 255; /* set
*ptr_byte1 to 255 */
/* optional lines */
ptr_byte1 += 2;
*ptr_byte1 = 255;
for (j = 0; j < 32; j++) { /* display
the 32 bits of memory */
printf ("%i", (*ptr_dword1 & 0x80000000) ? 1 : 0);
*ptr_dword1 = *ptr_dword1 << 1;
}
printf ("\n");
return 0;
}
/* end */
Thankyou,
Graham Warren
- Raw text -