/* program illustrating arrays, strings, and pointers */

#include <stdio.h>


int
 main()
{
  /* first as an array of characters */
  char first [4] = {'C', 'o', 'l', 'd'};

  /* second as a string:  character array ending with a null */  
  char second[6] = "World";

  /* third as an array of characters */
  char third [16] = {'C', 'o', 'm', 'p', 'u', 't', 'e', 'r',
                     ' ', 'S', 'c', 'i', 'e', 'n', 'c', 'e'};

  /* fourth as a pointer to an array of characters */
  char * fourth = second;

  /* fifth as a pointer to a string literal */
  char * fifth = "Hello";

  /* print first 3 characters in array */
  printf("first 3 characters in each array\n");
  printf("   first: %c%c%c\n",  first[0],  first[1],  first[2]);
  printf("  second: %c%c%c\n", second[0], second[1], second[2]);
  printf("   third: %c%c%c\n",  third[0],  third[1],  third[2]);
  printf("  fourth: %c%c%c\n", fourth[0], fourth[1], fourth[2]);
  printf("   fifth: %c%c%c\n",  fifth[0],  fifth[1],  fifth[2]);

  /* print base addresses */
  printf("Variable addresses and array base addresses\n");
  printf("   first address: %lu,   array base address: %lu\n", 
	 (unsigned long)&first,  (unsigned long)first);
  printf("  second address: %lu,   array base address: %lu\n", 
	 (unsigned long)&second, (unsigned long)second);
  printf("   third address: %lu,   array base address: %lu\n", 
	 (unsigned long)&third,  (unsigned long)third);
  printf("  fourth address: %lu,   array base address: %lu\n", 
	 (unsigned long)&fourth, (unsigned long)fourth);
  printf("   fifth address: %lu,   array base address: %lu\n", 
	 (unsigned long)&fifth,  (unsigned long)fifth);

  /* print all values as strings */
  printf("variables printed as strings\n");
  printf("   first: %s\n", first);
  printf("  second: %s\n", second);
  printf("   third: %s\n", third);
  printf("  fourth: %s\n", fourth);
  printf("   fifth: %s\n", fifth);

  return 0;
}
