/* test107.c
L. Stewart February 15, 1982 5:00 PM
test for pointer arithmetic */
struct ZN {
struct ZN *next;
int length;
};
struct twowords {
int a, b;
};
struct threewords {
int a, b, c;
};
struct ZN *z, *root, az[5];
int i;
struct twowords *p2, *q2;
struct threewords *p3, *q3;
main()
{
/* multiple assignment */
root = z = az;
for (i=0;i<4;i+=1) {
z->next = z+i;
z->next = &z[i];
z->length = i;
z+=1;
};
/* try adding i*2 to the cell p3 */
p3 = (struct threewords *) (((int *) p3)+i);
/* this one breaks */
q2 = (struct twowords *) (p3+i);
/* does this one work better? */
q2 = (struct twowords *) (((struct threewords *) p3)+i);
/* how about */
q3 = p3+i;
q2 = (struct twowords *) q3;
/* this one breaks */
q2 = (struct twowords *) (p3-i);
/* does this one work better? */
q2 = (struct twowords *) (((struct threewords *) p3)-i);
/* how about */
/* try subtraction */
q3 = p3-i;
q2 = (struct twowords *) q3;
/* test do .. while loop */
do {
i += 1;
} while (i<0);
};