, struct . :
struct __ {
_1;
_N;
_1;
_K;
};
__ (), ; ; , ( , , ..).
struct , . address:
struct address {
char* name; //
long number; //
char* street; //
char* town; //
char state[2]; //
int zip; //
};
, - address. (name, number, street, town, state, zip), . : - , ? , . , .. struct adr {adr z;}; ++, struct adr {adr* z;}; .
address address, address, address, address, .. :
int i=2; // i int.
int *pi = &i, ari[3] = {1,3,7}, &rfi = i; /* pi int; ari int; rfi int.*/
address Nik={"Jim Dandy", 61, "South Street", "New Providence", {N,J}, 1974};./* Nik address. name, street, town "Jim Dandy", "South Street", "New Providence" . number, zip 61 1974 . state Nik N, J */
address *pNik = &Nik, ArAddr[3], &rfNik= Nik; /* pNik address; ArAddr address; rfNik address.*/
|
|
, Nik, , . name Nik , "Jim Dandy"; number Nik 61 ..
, . struct , :
struct { char N[12]; int value;} XX, Y[7], *pXX; /* XX, Y, . N value.*/
, , XX Y .
. ,
( ) | ( ) |
_._::__ | _. __ |
__-> _::__ | __-> __ |
(*__). _::__ | (*__).__ |
, , .
(), () ( ) . , , . _ , _.__, __->__, (*__)._ , :
Nik.name // char* , char*
Nik.name = ; /* name char* Nik , */
Nik.number = 34; /*C number Nik 34. Nik.number long */
ArAddr[0].number =75; /*C number ArAddr[0] 75. ArAddr[0].number long */
pNik->street = ; /* C Nik street Nik. street char*, pNik->street char*. street Nik , .*/
(*pNik).zip = 3456; /* , , , zip 3456. (*pNik).zip int. */
|
|
Nik.
cout << "\n : "<< Nik.name << "\t : "<<Nik.number<<"\t : "<<Nik.street;
cout<<\t :<<Nik.state<<"\t : "<<Nik.state[0]<< Nik.state[1]<<"\t : "<<Nik.zip;
: : 34 : : New Providence : NJ : 3456
cout<< Nik , cout , address. cout address. .
, , , .. . Nik.number, number Nik, ArAddr[0].number, number ArAddr[0] , ( 34, 75).
return. :
address current = {" ", 31, " ", "", {R,U}, 3900};
address set_current(address next)
{
address prev = current;
current = next;
return prev;
}
void main (){
address Nik={"Jim Dandy", 61, "South Street", "New Providence", {N,J}, 1974}, f2;
f2 = set_current(Nik);
}
, . next , Nik . , next , Nik. set_current () address , address, prev. prev , f2 , .. f2 , . ( prev f2).
. , .
,
(&, *, sizeof(), =, () ->, *, ->*,::). , , .
|
|
& , . , .
( ) * . , .
() -> . .
sizeof () , , . , . , + ( , ) + , (. . 4). , sizeof (address) = 20 , int 2 sizeof (address) = 24, sizeof (int) = 4 .
= , , , , .. , , , (. ). ( ). . , .
(::) .
->* ___->*. *(___->), .. - , (*) .
, :
struct, union, class __;
C , __ , - . , ,
struct A;// , , , - .
struct B { A* pa;};//
struct A { B*pb;}; //
|
|
, . , :
struct s1 { int a; };
struct s2 { int a; };
:
s1 x;
s2 y = x; // :
, , :
s1 x;
int i = x; // :
, , , , . , typedef, , .
:
typedef char* Pchar;
Pchar p1, p2;
char* p3 = p1; //
.
7.2 ++
, (), , ( ), .
k- / ;
k- ;
k- ;
( ) ;
( ) ;
;
;
;
.
. , . , . .
, , , .
, (, , ) .
, , (, , ) .
- , (, , ) .
. 1 ++ ( ). () : P- ; O , ; N . begin end .
. 7.1
, , .. , N , . , , . , , .. , . , , .
++, .
#include "stdafx.h"
#include<string.h>
#include<iostream.h>
card, .
struct card { //
char *author; // ...
char *title; //
char *city; //
char *firm; //
int year; //
int pages; //
|
|
};
// :
void printbook(card& car)
{ static int count = 0;
cout<<"\n"<< ++count <<". "<<car.author;
cout<<" "<<car.title<<".- "<<car.city;
cout<<": "<<car.firm<<", ";
cout<<"\n"<<car.year<<".- "<<car.pages<<" c.";
}
, record. prior next P N . 1. obj , .. , .
struct record { // (1)
void* obj;
record *prior;
record *next;
};
// :
card books[] = { // : (2)
{ "Kruglinski David", "Visual C++ 6.0", "", "",2000, 819},
{ "Stroustrup B"," ++", "","",1993, 560},
{ "Turbo C++.", " ", "","",1991,394},
{ "Lippman S.B.","C++ ", "","",1993,496}
};
void main()
{ record *begin = NULL, // ࠠ (3)
*last = NULL, //
*list; //
// n- :
int n = sizeof(books)/sizeof(books[0]);
// :
for (int i=0;i<n; i++)
{// ( ): (4)
last = new(record);
card * pcd = new (card);
// :
pcd->author = books[i].author;
pcd->title = books[i].title;
pcd->city = books[i].city;
pcd->firm = books[i].firm;
pcd->year = books[i].year;
pcd->pages = books[i].pages;
last->obj = pcd;
// ( ):
if (begin == NULL) // (5)
{last->prior = NULL;
begin = last;
last->next = NULL;
}
else{
//
list = begin;
// -
// :
while (list){ //(6)
if (strcmp(((card*)(last->obj))->author, ((card*)(list->obj))->author) < 0){ // list:
if (begin == list){
// : (7)
last->prior = NULL;
begin = last;
}
else{
// : (8)
list->prior->next = last;
last->prior = list->prior;
}
list->prior = last;
last->next = list;
// :
break;
}
if (list->next == NULL){
// : (9)
last->next = NULL;
last->prior = list;
list->next = last;
// :
break;
}
// :
list = list->next;
}// ( while)
//( )
} // ( else)
} // (for)
// :
list = begin; // (10)
cout<<"\n";
while (list)
{ printbook(*(card*)(list->obj));
delete (card*)(list->obj);
record* tmp = list;
list = list->next;
delete tmp;
}
}
, . (, , ..) , . , STL ( ).
(, ). , 5 10 , record. , . InsertBg .
#include "stdafx.h"
#include<string.h>
#include<iostream.h>
void printSpisok(double * p)
{ static int count = 0;
cout<<"\n"<< ++count <<"\t"<<*p;
}
struct record {
void* obj;
record *prior;
record *next;
static record *begin; //
};
//--------------------------------------------------------------
void InsertBg(void* lt){
if(record::begin ==NULL) {//
record::begin = new (record);
record::begin->next = NULL;
record::begin->prior = NULL;
record::begin->obj = lt;
return;
}
record* tmp = new (record); //
record::begin->prior = tmp;
tmp->prior = NULL;
tmp->next = record::begin;
tmp->obj = lt;
record::begin = tmp;
return;
}
//---------------------------------------------------------
void ClearList(){
record * list = record::begin;
record* tmp = list;
while (list){
delete (double*)(list->obj);
tmp = list;
list = list->next;
delete tmp;
}
}
//------------------------------------------------------
record* record::begin=NULL; //
//----------------------------------------------------
void main()
{
record *list;
double *pi = new (double); *pi = 3.14;
double *ex = new (double); *ex = 2.79;
double *z = new (double); *z = 1.1;
InsertBg(pi);
InsertBg(ex);
InsertBg(z);
list = record::begin;
while (list){
printSpisok((double*)list->obj);
cout<<"\t";
list = list->next;
}
ClearList();
}
1.1, 2.79, 3.14.
record begin static. begin . , , , , . , , , , ( ). (::), , record* record::begin=NULL; , , (.) (->).
, record begin . , , record.
: InsertBg() ClearList().