3.Compound data types

The codes:

// 3.Compound Data Types

/*****************************************
1
Arrays
*/

// arrays example
#include <iostream>
using namespace std;

int billy [] = {16, 2, 77, 40, 12071};
int n, result=0;

int main ()
{
  for ( n=0 ; n<5 ; n++ )
  {
    result += billy[n];
  }
  cout << result;
  return 0;
}



// arrays example
#include <iostream>
using namespace std;

#define WIDTH 5
#define HEIGHT 3

int jimmy [HEIGHT][WIDTH];
int n,m;

int main ()
{
  for (n=0;n<HEIGHT;n++)
    for (m=0;m<WIDTH;m++)
    {
      jimmy[n][m]=(n+1)*(m+1);
    }
  return 0;
}



// arrays example
#include <iostream>
using namespace std;

#define WIDTH 5
#define HEIGHT 3

int jimmy [HEIGHT * WIDTH];
int n,m;

int main ()
{
  for (n=0;n<HEIGHT;n++)
    for (m=0;m<WIDTH;m++)
    {
      jimmy[n*WIDTH+m]=(n+1)*(m+1);
    }
  return 0;
}


// arrays as parameters
#include <iostream>
using namespace std;

void printarray (int arg[], int length) {
  for (int n=0; n<length; n++)
    cout << arg[n] << " ";
  cout << "
";
}

int main ()
{
  int firstarray[] = {5, 10, 15};
  int secondarray[] = {2, 4, 6, 8, 10};
  printarray (firstarray,3);
  printarray (secondarray,5);
  return 0;
}


/**************************************
2
Character Sequences
*/

// null-terminated sequences of characters
#include <iostream>
using namespace std;

int main ()
{
  char question[] = "Please, enter your first name: ";
  char greeting[] = "Hello, ";
  char yourname [80];
  cout << question;
  cin >> yourname;
  cout << greeting << yourname << "!";
  return 0;
}


/*****************************************
3
Pointers
*/

// my first pointer
#include <iostream>
using namespace std;

int main ()
{
  int firstvalue, secondvalue;
  int * mypointer;

  mypointer = &firstvalue;
  *mypointer = 10;
  mypointer = &secondvalue;
  *mypointer = 20;
  cout << "firstvalue is " << firstvalue << endl;
  cout << "secondvalue is " << secondvalue << endl;
  return 0;
}


// more pointers
#include <iostream>
using namespace std;

int main ()
{
  int firstvalue = 5, secondvalue = 15;
  int * p1, * p2;

  p1 = &firstvalue;  // p1 = address of firstvalue
  p2 = &secondvalue; // p2 = address of secondvalue
  *p1 = 10;          // value pointed by p1 = 10
  *p2 = *p1;         // value pointed by p2 = value pointed by p1
  p1 = p2;           // p1 = p2 (value of pointer is copied)
  *p1 = 20;          // value pointed by p1 = 20
  
  cout << "firstvalue is " << firstvalue << endl;
  cout << "secondvalue is " << secondvalue << endl;
  return 0;
}


// more pointers
#include <iostream>
using namespace std;

int main ()
{
  int numbers[5];
  int * p;
  p = numbers;  *p = 10;
  p++;  *p = 20;
  p = &numbers[2];  *p = 30;
  p = numbers + 3;  *p = 40;
  p = numbers;  *(p+4) = 50;
  for (int n=0; n<5; n++)
    cout << numbers[n] << ", ";
  return 0;
}


// more...
#include <iostream>
using namespace std;

int main ()
{
  char * terry = "hello";
  cout << *(terry+4) << endl;
  cout << terry[4] << endl;
  return 0;
}



// more...
#include <iostream>
using namespace std;

int main ()
{
  char *mychar;
  short *myshort;
  long *mylong;
  cout<<hex<<(unsigned)mychar<<" "<<myshort<<" "<<mylong<<endl;
  cout<<hex<<(unsigned)(++mychar)<<" "<<++myshort<<" "<<++mylong<<endl;
  return 0;
}



// more...
#include <iostream>
using namespace std;

int main ()
{
  char a;
  char *b;
  char **c;
  char ***d=&c; // 
  char ****e=&d; // can..
  a='z';
  b=&a;
  c=&b;
  cout<<a<<endl;
  cout<<hex<<(unsigned)b<<" "<<c<<endl;
  cout<<hex<<unsigned(*c)<<" "<<**c<<endl;
  
  return 0;
}



// void pointer, increaser
#include <iostream>
using namespace std;

void increase (void* data, int psize) //void
{
  if ( psize == sizeof(char) )
  { 
    char* pchar; 
    pchar=(char*)data; // (char*)
    ++(*pchar); 
  }
  else if (psize == sizeof(int) )
  { 
    int* pint; 
    pint=(int*)data;  // (int*)
    ++(*pint); 
  }
}

int main ()
{
  char a = 'x';
  int b = 1602;
  increase (&a,sizeof(a));
  increase (&b,sizeof(b));
  cout << a << ", " << b << endl;
  return 0;
}


// NULL pointer, void pointers
#include <iostream>
using namespace std;

int main ()
{
  int b = 1602;
  int *p=0;
  int *t=NULL; // pointint to "nowhere"
  void *s=0; // point to a value that has no type
  p=&b;
  t=&b;
  s=&b; // 
  cout << s << endl; // just a dress
  cout << *(int*)s << endl; // can't be *s
  return 0;
}



// pointer to functions
#include <iostream>
using namespace std;

int addition (int a, int b)
{ return (a+b); }

int subtraction (int a, int b)
{ return (a-b); }

int operation (int x, int y, int (*functocall)(int,int))
{
  int g;
  g = (*functocall)(x,y);
  return (g);
}

int main ()
{
  int m,n;
  int (*minus)(int,int) = subtraction; // minus is a pointer to a function subtraction

  m = operation (7, 5, addition); // choice addition
  n = operation (20, m, minus);  // choice minus
  cout <<n;
  return 0;
}


/***********************************************
4
Dynamic Memory
*/

// rememb-o-matic
#include <iostream>
#include <new>
using namespace std;

int main ()
{
  int i,n;
  int * p;
  cout << "How many numbers would you like to type? ";
  cin >> i;
  p= new (nothrow) int[i];
  if (p == 0)
    cout << "Error: memory could not be allocated";
  else
  {
    for (n=0; n<i; n++)
    {
      cout << "Enter number: ";
      cin >> p[n];
    }
    cout << "You have entered: ";
    for (n=0; n<i; n++)
      cout << p[n] << ", ";
    delete[] p; // no argument
  }
  return 0;
}

/************************************************
5
Data Structures
*/

// example about structures
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

struct movies_t {
  string title;
  int year;
} mine, yours;

void printmovie (movies_t movie);

int main ()
{
  string mystr;

  mine.title = "2001 A Space Odyssey";
  mine.year = 1968;

  cout << "Enter title: ";
  getline (cin,yours.title);
  cout << "Enter year: ";
  getline (cin,mystr);
  stringstream(mystr) >> yours.year;

  cout << "My favorite movie is:
 ";
  printmovie (mine);
  cout << "And yours is:
 ";
  printmovie (yours);
  return 0;
}

void printmovie (movies_t movie)
{
  cout << movie.title;
  cout << " (" << movie.year << ")
";
}



// array of structures
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

#define N_MOVIES 3

struct movies_t {
  string title;
  int year;
} films [N_MOVIES];

void printmovie (movies_t movie);

int main ()
{
  string mystr;
  int n;

  for (n=0; n<N_MOVIES; n++)
  {
    cout << "Enter title: ";
    getline (cin,films[n].title);
    cout << "Enter year: ";
    getline (cin,mystr);
    stringstream(mystr) >> films[n].year;
  }

  cout << "
You have entered these movies:
";
  for (n=0; n<N_MOVIES; n++)
    printmovie (films[n]);
  return 0;
}

void printmovie (movies_t movie)
{
  cout << movie.title;
  cout << " (" << movie.year << ")
";
}



// pointers to structures
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

struct movies_t {
  string title;
  int year;
};

int main ()
{
  string mystr;

  movies_t amovie;
  movies_t * pmovie;
  pmovie = &amovie;

  cout << "Enter title: ";
  getline (cin, pmovie->title);
  cout << "Enter year: ";
  getline (cin, mystr);
  (stringstream) mystr >> pmovie->year;

  cout << "
You have entered:
";
  cout << pmovie->title;
  cout << " (" << pmovie->year << ")
";

  return 0;
}


// nesting structures
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

struct movies_t {
  string title;
  int year;
};

struct friends_t {
  string name;
  string email;
  movies_t favorite_movie;
} charlie,maria;

friends_t * pfriends = &charlie;

int main ()
{
  charlie.name="charlie";
  cout<< charlie.name << endl;
  maria.favorite_movie.title="ss";
  cout<< maria.favorite_movie.title << endl;
  charlie.favorite_movie.year = 1984;
  cout<< charlie.favorite_movie.year << endl;
  cout<< pfriends->favorite_movie.year << endl;

  return 0;
}


/***************************************
6
Other Data Types
*/


// typedef
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

typedef struct movies_t {
  string title;
  int year;
} movies_t;
int main ()
{
  typedef char C;
  typedef unsigned int WORD;
  typedef char * pChar;
  typedef char filed [50]; // 
  movies_t movi;
  movi.title="test";
  movi.year=1984;
  C c;
  WORD i;
  pChar p;
  filed f; // char f[50]
  f[49]='t';
  cout << f[49] << endl;
  p = f;
  p[49]='p';
  cout << f[49] << endl;

  return 0;
}



/*
union的作用主要是节省内存空间,但现在内存都比较大,
所以在一般的编程中很少用到,而且处理不好容易出错,
建议非特殊情况不要使用。
*/

// union
#include <iostream>
using namespace std;

union mytypes_t {
  char c;
  int i;
  double f;
} myunion;

int main ()
{
  cout<< sizeof(myunion) << endl;
  myunion.c='c';
  cout << myunion.c << endl;
  myunion.i=1; // same physical space in memory
  cout << myunion.c << endl;

  return 0;
}



// enumerations
#include <iostream>
using namespace std;

enum colors {
  black,
  blue,
  green,
  cyan,
  red,
  purple,
  yellow,
  white
};

int main ()
{
  colors mycolor;
  mycolor = blue;
  cout << mycolor << endl;
  mycolor = red;
  cout << mycolor << endl;

  return 0;
}

TOP

原文地址:https://www.cnblogs.com/xin-le/p/4083881.html