POINTER HELP REQUESTED<br><br>I am an assembly language programmer - I also program in many other languages BUT, as many of you youngsters may not yet have learned, Knowledge has a short shelf life and my C/C++ has been on the shelf too long.
<br>In this - &quot;long int&quot; means 64 bit.<br><br>In assembly language there is no typing at all.&nbsp; A 32 bit quantity may be <br>1. an integer, <br>2. a sixteen bit number followed by a byte with no defined value and a
<br>&nbsp;&nbsp; &nbsp;character,<br>3. half of a double,<br>4. four bytes of program.<br>5. a pointer to something,<br>6. or a pointer to a pointer<br>and it is up to the programmer how something is interpreted and what alignment is used.
<br><br>I am converting a program, written in assembler to C/C++ and I am stuck over pointers. This data structure is a linked list of variables.<br><br>A block of memory consists of records made up of<br><br>Byte No. Content
<br>(0..7)&nbsp;&nbsp; &nbsp; a 32 bit pointer to <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a long int (8 Byte) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; or a double <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;or (32 bit pointer and two 16 bit integers)<br>(8..15)&nbsp;&nbsp; &nbsp; followed by one byte made up of<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;2 bits of flags, 4 bits of a number and two more bit flag
<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;followed by an ASCIZ string of 4 n + 3 bytes long (n = 0..30)<br>(16..23) followed by a long int or Double <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;or (32 bit pointer and two 16 bit integers)<br><br>Bits 8..15 are anded with&nbsp; &amp; 0x00 00 00 3c and then added to the address of this record to get the next record.
<br><br>First variable is a long int called &quot;ten&quot; and has the value 10 so the <br>first two bits of byte 8 hav the value 0b01 and the record length is 20 <br>bytes the other two bit flags have the value 0b01 (0 means Not an array 
<br>and the 1 bit says this variable has been initialised).<br><br>Abit of (obviously incorrect) code follows:<br><br>&nbsp;&nbsp; &nbsp;char * s = &quot;ten&quot;;<br>&nbsp;&nbsp; &nbsp;void * blockaddr = malloc(varspace);&nbsp; // Check return value for NULL
<br>&nbsp;&nbsp; &nbsp;recptr = blockaddr;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // get address of first record<br>&nbsp;&nbsp; &nbsp;* recptr = * recptr + 16; // insert into memory at blockaddr <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // blockaddress + 16<br>&nbsp;&nbsp; &nbsp;recptr += 8;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; // pointer arithmetic point to byte 8
<br><br>&nbsp;&nbsp; &nbsp;* recptr = 1 | 20 | 0x80&nbsp; // two bit flags | record length |<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // initialised as a byte value<br>&nbsp;&nbsp; &nbsp;recptr++;<br>&nbsp;&nbsp; &nbsp;*recptr++ = *s;&nbsp;&nbsp; &nbsp;&nbsp; // recptr is a char *<br>&nbsp;&nbsp; &nbsp;char ch;&nbsp;&nbsp; &nbsp;
<br>&nbsp;&nbsp; &nbsp;do { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *recptr++ = ch = * (++ s);<br>&nbsp;&nbsp; &nbsp;} while( ch);<br>&nbsp;&nbsp; &nbsp;recptr +=3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // align on four byte - <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // we are at the start of the next record.<br>
<br>