POINTER HELP REQUESTED<br><br>My first posting had some errors - I am still not sure of the exact structure I will be using.&nbsp; I hope this is correct.<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. <br>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..3)&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>(4..11) followed by a long int or Double <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;or (32 bit pointer and two 16 bit integers)
<br>(12..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><br>Bytes 12..15&nbsp; 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 12 have 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 + 4; // insert into memory at blockaddr <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;&nbsp;&nbsp;&nbsp;&nbsp; // blockaddress + 4<br>&nbsp;&nbsp; &nbsp;recptr += 12;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // pointer arithmetic point to byte 24
<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>