forked from ShujiaHuang/Cpp-Primer-Plus-6th
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
575f09f
commit 158b4cc
Showing
24 changed files
with
620 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
// addpntrs.cpp -- pointer addition | ||
#include <iostream> | ||
int main() | ||
{ | ||
using namespace std; | ||
double wages[3] = {10000.0, 20000.0, 30000.0}; | ||
short stacks[3] = {3, 2, 1}; | ||
|
||
// Here are two ways to get the address of an array | ||
double * pw = wages; // name of an array = address | ||
short * ps = &stacks[0]; // or use address operator | ||
// with array element | ||
cout << "pw = " << pw << ", *pw = " << *pw << endl; | ||
pw = pw + 1; | ||
cout << "add 1 to the pw pointer:\n"; | ||
cout << "pw = " << pw << ", *pw = " << *pw << "\n\n"; | ||
|
||
cout << "ps = " << ps << ", *ps = " << *ps << endl; | ||
ps = ps + 1; | ||
cout << "add 1 to the ps pointer:\n"; | ||
cout << "ps = " << ps << ", *ps = " << *ps << "\n\n"; | ||
|
||
cout << "access two elements with array notation\n"; | ||
cout << "stacks[0] = " << stacks[0] | ||
<< ", stacks[1] = " << stacks[1] << endl; | ||
cout << "access two elements with pointer notation\n"; | ||
|
||
cout << "*stacks = " << *stacks | ||
<< ", *(stacks + 1) = " << *(stacks + 1) << endl; | ||
|
||
cout << sizeof(wages) << " = size of wages array\n"; | ||
cout << sizeof(pw) << " = size of pw pointer\n"; | ||
// cin.get(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
// address.cpp -- using the & operator to find addresses | ||
#include <iostream> | ||
int main() | ||
{ | ||
using namespace std; | ||
int donuts = 6; | ||
double cups = 4.5; | ||
|
||
cout << "donuts value = " << donuts; | ||
cout << " and donuts address = " << &donuts << endl; | ||
// NOTE: you may need to use unsigned (&donuts) | ||
// and unsigned (&cups) | ||
cout << "cups value = " << cups; | ||
cout << " and cups address = " << &cups << endl; | ||
// cin.get(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
// arraynew.cpp -- using the new operator for arrays | ||
#include <iostream> | ||
int main() | ||
{ | ||
using namespace std; | ||
double * p3 = new double [3]; // space for 3 doubles | ||
p3[0] = 0.2; // treat p3 like an array name | ||
p3[1] = 0.5; | ||
p3[2] = 0.8; | ||
cout << "p3[1] is " << p3[1] << ".\n"; | ||
p3 = p3 + 1; // increment the pointer | ||
cout << "Now p3[0] is " << p3[0] << " and "; | ||
cout << "p3[1] is " << p3[1] << ".\n"; | ||
p3 = p3 - 1; // point back to beginning | ||
delete [] p3; // free the memory | ||
// cin.get(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
// arrayone.cpp -- small arrays of integers | ||
#include <iostream> | ||
int main() | ||
{ | ||
using namespace std; | ||
int yams[3]; // creates array with three elements | ||
yams[0] = 7; // assign value to first element | ||
yams[1] = 8; | ||
yams[2] = 6; | ||
|
||
int yamcosts[3] = {20, 30, 5}; // create, initialize array | ||
|
||
// NOTE: If your C++ compiler or translator can't initialize | ||
// this array, use static int yamcosts[3] instead of | ||
// int yamcosts[3] | ||
|
||
cout << "Total yams = "; | ||
cout << yams[0] + yams[1] + yams[2] << endl; | ||
cout << "The package with " << yams[1] << " yams costs "; | ||
cout << yamcosts[1] << " cents per yam.\n"; | ||
int total = yams[0] * yamcosts[0] + yams[1] * yamcosts[1]; | ||
total = total + yams[2] * yamcosts[2]; | ||
cout << "The total yam expense is " << total << " cents.\n"; | ||
|
||
cout << "\nSize of yams array = " << sizeof yams; | ||
cout << " bytes.\n"; | ||
cout << "Size of one element = " << sizeof yams[0]; | ||
cout << " bytes.\n"; | ||
|
||
// cin.get(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
// arrstruc.cpp -- an array of structures | ||
#include <iostream> | ||
struct inflatable | ||
{ | ||
char name[20]; | ||
float volume; | ||
double price; | ||
}; | ||
int main() | ||
{ | ||
using namespace std; | ||
inflatable guests[2] = // initializing an array of structs | ||
{ | ||
{"Bambi", 0.5, 21.99}, // first structure in array | ||
{"Godzilla", 2000, 565.99} // next structure in array | ||
}; | ||
|
||
cout << "The guests " << guests[0].name << " and " << guests[1].name | ||
<< "\nhave a combined volume of " | ||
<< guests[0].volume + guests[1].volume << " cubic feet.\n"; | ||
// cin.get(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
// assgn_st.cpp -- assigning structures | ||
#include <iostream> | ||
struct inflatable | ||
{ | ||
char name[20]; | ||
float volume; | ||
double price; | ||
}; | ||
int main() | ||
{ | ||
using namespace std; | ||
inflatable bouquet = | ||
{ | ||
"sunflowers", | ||
0.20, | ||
12.49 | ||
}; | ||
inflatable choice; | ||
cout << "bouquet: " << bouquet.name << " for $"; | ||
cout << bouquet.price << endl; | ||
|
||
choice = bouquet; // assign one structure to another | ||
cout << "choice: " << choice.name << " for $"; | ||
cout << choice.price << endl; | ||
// cin.get(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
// choices.cpp -- array variations | ||
#include <iostream> | ||
#include <vector> // STL C++98 | ||
#include <array> // C++0x | ||
int main() | ||
{ | ||
using namespace std; | ||
// C, original C++ | ||
double a1[4] = {1.2, 2.4, 3.6, 4.8}; | ||
// C++98 STL | ||
vector<double> a2(4); // create vector with 4 elements | ||
// no simple way to initialize in C98 | ||
a2[0] = 1.0/3.0; | ||
a2[1] = 1.0/5.0; | ||
a2[2] = 1.0/7.0; | ||
a2[3] = 1.0/9.0; | ||
// C++0x -- create and initialize array object | ||
array<double, 4> a3 = {3.14, 2.72, 1.62, 1.41}; | ||
array<double, 4> a4; | ||
a4 = a3; // valid for array objects of same size | ||
// use array notation | ||
cout << "a1[2]: " << a1[2] << " at " << &a1[2] << endl; | ||
cout << "a2[2]: " << a2[2] << " at " << &a2[2] << endl; | ||
cout << "a3[2]: " << a3[2] << " at " << &a3[2] << endl; | ||
cout << "a4[2]: " << a4[2] << " at " << &a4[2] << endl; | ||
// misdeed | ||
a1[-2] = 20.2; | ||
cout << "a1[-2]: " << a1[-2] <<" at " << &a1[-2] << endl; | ||
cout << "a3[2]: " << a3[2] << " at " << &a3[2] << endl; | ||
cout << "a4[2]: " << a4[2] << " at " << &a4[2] << endl; | ||
// cin.get(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
// delete.cpp -- using the delete operator | ||
#include <iostream> | ||
#include <cstring> // or string.h | ||
using namespace std; | ||
char * getname(void); // function prototype | ||
int main() | ||
{ | ||
char * name; // create pointer but no storage | ||
name = getname(); // assign address of string to name | ||
|
||
cout << name << " at " << (int *) name << "\n"; | ||
delete [] name; // memory freed | ||
|
||
name = getname(); // reuse freed memory | ||
cout << name << " at " << (int *) name << "\n"; | ||
delete [] name; // memory freed again | ||
// cin.get(); | ||
// cin.get(); | ||
return 0; | ||
} | ||
|
||
char * getname() // return pointer to new string | ||
{ | ||
char temp[80]; // temporary storage | ||
cout << "Enter last name: "; | ||
cin >> temp; | ||
char * pn = new char[strlen(temp) + 1]; | ||
strcpy(pn, temp); // copy string into smaller space | ||
|
||
return pn; // temp lost when function ends | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
// init_ptr.cpp -- initialize a pointer | ||
#include <iostream> | ||
int main() | ||
{ | ||
using namespace std; | ||
int higgens = 5; | ||
int * pt = &higgens; | ||
|
||
cout << "Value of higgens = " << higgens | ||
<< "; Address of higgens = " << &higgens << endl; | ||
cout << "Value of *pt = " << *pt | ||
<< "; Value of pt = " << pt << endl; | ||
// cin.get(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
// instr1.cpp -- reading more than one string | ||
#include <iostream> | ||
int main() | ||
{ | ||
using namespace std; | ||
const int ArSize = 20; | ||
char name[ArSize]; | ||
char dessert[ArSize]; | ||
|
||
cout << "Enter your name:\n"; | ||
cin >> name; | ||
cout << "Enter your favorite dessert:\n"; | ||
cin >> dessert; | ||
cout << "I have some delicious " << dessert; | ||
cout << " for you, " << name << ".\n"; | ||
// cin.get(); | ||
// cin.get(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
// instr2.cpp -- reading more than one word with getline | ||
#include <iostream> | ||
int main() | ||
{ | ||
using namespace std; | ||
const int ArSize = 20; | ||
char name[ArSize]; | ||
char dessert[ArSize]; | ||
|
||
cout << "Enter your name:\n"; | ||
cin.getline(name, ArSize); // reads through newline | ||
cout << "Enter your favorite dessert:\n"; | ||
cin.getline(dessert, ArSize); | ||
cout << "I have some delicious " << dessert; | ||
cout << " for you, " << name << ".\n"; | ||
// cin.get(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
// instr3.cpp -- reading more than one word with get() & get() | ||
#include <iostream> | ||
int main() | ||
{ | ||
using namespace std; | ||
const int ArSize = 20; | ||
char name[ArSize]; | ||
char dessert[ArSize]; | ||
|
||
cout << "Enter your name:\n"; | ||
cin.get(name, ArSize).get(); // read string, newline | ||
cout << "Enter your favorite dessert:\n"; | ||
cin.get(dessert, ArSize).get(); | ||
cout << "I have some delicious " << dessert; | ||
cout << " for you, " << name << ".\n"; | ||
// cin.get(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
// mixtypes.cpp --some type combinations | ||
#include <iostream> | ||
|
||
struct antarctica_years_end | ||
{ | ||
int year; | ||
/* some really interesting data, etc. */ | ||
}; | ||
|
||
int main() | ||
{ | ||
antarctica_years_end s01, s02, s03; | ||
s01.year = 1998; | ||
antarctica_years_end * pa = &s02; | ||
pa->year = 1999; | ||
antarctica_years_end trio[3]; // array of 3 structures | ||
trio[0].year = 2003; | ||
std::cout << trio->year << std::endl; | ||
const antarctica_years_end * arp[3] = {&s01, &s02, &s03}; | ||
std::cout << arp[1]->year << std::endl; | ||
const antarctica_years_end ** ppa = arp; | ||
auto ppb = arp; // C++0x automatic type deduction | ||
// or else use const antarctica_years_end ** ppb = arp; | ||
std::cout << (*ppa)->year << std::endl; | ||
std::cout << (*(ppb+1))->year << std::endl; | ||
// std::cin.get(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
// newstrct.cpp -- using new with a structure | ||
#include <iostream> | ||
struct inflatable // structure definition | ||
{ | ||
char name[20]; | ||
float volume; | ||
double price; | ||
}; | ||
int main() | ||
{ | ||
using namespace std; | ||
inflatable * ps = new inflatable; // allot memory for structure | ||
cout << "Enter name of inflatable item: "; | ||
cin.get(ps->name, 20); // method 1 for member access | ||
cout << "Enter volume in cubic feet: "; | ||
cin >> (*ps).volume; // method 2 for member access | ||
cout << "Enter price: $"; | ||
cin >> ps->price; | ||
cout << "Name: " << (*ps).name << endl; // method 2 | ||
cout << "Volume: " << ps->volume << " cubic feet\n"; // method 1 | ||
cout << "Price: $" << ps->price << endl; // method 1 | ||
delete ps; // free memory used by structure | ||
// cin.get(); | ||
// cin.get(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
// numstr.cpp -- following number input with line input | ||
#include <iostream> | ||
int main() | ||
{ | ||
using namespace std; | ||
cout << "What year was your house built?\n"; | ||
int year; | ||
cin >> year; | ||
// cin.get(); | ||
cout << "What is its street address?\n"; | ||
char address[80]; | ||
cin.getline(address, 80); | ||
cout << "Year built: " << year << endl; | ||
cout << "Address: " << address << endl; | ||
cout << "Done!\n"; | ||
// cin.get(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
// pointer.cpp -- our first pointer variable | ||
#include <iostream> | ||
int main() | ||
{ | ||
using namespace std; | ||
int updates = 6; // declare a variable | ||
int * p_updates; // declare pointer to an int | ||
|
||
p_updates = &updates; // assign address of int to pointer | ||
|
||
// express values two ways | ||
cout << "Values: updates = " << updates; | ||
cout << ", *p_updates = " << *p_updates << endl; | ||
|
||
// express address two ways | ||
cout << "Addresses: &updates = " << &updates; | ||
cout << ", p_updates = " << p_updates << endl; | ||
|
||
// use pointer to change value | ||
*p_updates = *p_updates + 1; | ||
cout << "Now updates = " << updates << endl; | ||
// cin.get(); | ||
return 0; | ||
} |
Oops, something went wrong.