longlonglive 2008. 8. 18. 15:51

int *p1
p1 = &b[1];


int a ={10,20,30}
int *p[3];    int 형 주소 3개를 담는 배열~?
p[0]= &a[0];

  a[0] a[1]    a[2]
    |   |      |
  p[0]   |   p[1] | p[2]


배열 이름 == 시작 주소

■ 2차원 배열의 특징
배열 이름 == 시작 주소
배열이름[행 ]  -> 행의 시작 주소

// 이차원 배열을 이용한 메모 입력과 출력
// 2008_8_14
#include<iostream>

using std::cin;
using std::cout;
using std::endl;

int main()
{
 char memo[5][1024];
 // 5 * 1024
 int i=0;

 for(i=0;i<5;i++)
 {
  cout<<"put memo : ";
  // char pointer  = 주소부터 입력한수 널문자까지 ('\0')입력 된


  // cin >> memo ; // 널(공백) 이전까지
  cin.getline(memo[i],1024);
 }

 cout<<"\n\n\t\t________memo";
 for(i=0;i<5;i++)
 {
  // char 포인터 = 주소를 출력 하는게 아니라 주소부터 시작해서

널까지 !
  cout<<memo[i];

 }

}
동적메모리 할당을 이용한 메모체크

// 동적 메모리 할당 - 이차원 배열을 이용한 메모 입력과 출력
#include<iostream>

using std::cin;
using std::cout;
using std::endl;

int main()
{
 //char memo[5][1024];
 // 5 * 1024
 char buf[1024];
 char *p[5];
 int i=0;
//int *p = new int;
 for(i=0;i<5;i++)
 {
  cout<<"put memo : ";
  // char pointer  = 주소부터 입력한수 널문자까지 ('\0')입력 된


  // cin >> memo ; // 널(공백) 이전까지
  //cin.getline(memo[i],1024);
  cin.getline(buf,1024);

  p[i] = new char[strlen(buf)+1];
  strcpy(p[i],buf);// ?????????????????????
 }

 cout<<"\n\n\t\t________memo";
 for(i=0;i<5;i++)
 {
  // char 포인터 = 주소를 출력 하는게 아니라 주소부터 시작해서

널까지 !
  //cout<<memo[i];
  cout<<p[i]<<endl;
 }

 cout<<"\n\n\t\t________buf";
 for(i=0;i<5;i++)
 {
  delete []p[i];  //    +형식 delete []pointer
  cout<<"동적 메모리 해제\n";
 }
 return 0;
}

// 동적 메모리 할당 - 이차원 배열을 이용한 메모 입력과 출력
#include<iostream>

using std::cin;
using std::cout;
using std::endl;

int main()
{
 //char memo[5][1024];
 // 5 * 1024
 char buf[1024];
 char *p[5];
 int i=0;
 int llen[5];
 int b=0;

//int *p = new int;
 for(i=0;i<5;i++)
 {
  cout<<"put memo : ";
  // char pointer  = 주소부터 입력한수 널문자까지 ('\0')입력 된


  // cin >> memo ; // 널(공백) 이전까지
  //cin.getline(memo[i],1024);
  cin.getline(buf,1024);

  p[i] = new char[strlen(buf)+1];
  strcpy(p[i],buf);// ?????????????????????
  llen[i] = strlen(buf);
 }
 
 for(i=0;i<4;i++)
 {
  if( llen[i] < llen[i+1])
  {
   llen[0]= llen[i+1] ;
  }
  else
  {
   llen[0]= llen[i];
  }

 }
 cout<<"\n\n\t\t________memo";
 for(i=0;i<5;i++)
 {
  // char 포인터 = 주소를 출력 하는게 아니라 주소부터 시작해서

널까지 !
  //cout<<memo[i];
  cout<<llen[0]<<endl;
 }
 cout<<"\n\n\t\t________buf";
 cout<<"가장긴놈"<<p[b-1]<<endl;

 cout<<"\n\n\t\t________buf";
 for(i=0;i<5;i++)
 {
  delete []p[i];  //    +형식 delete []pointer
  cout<<"동적 메모리 해제\n";
 }
 return 0;
}

int *p = new int;
문자열 동적 할당
 - 포인터가 동적 메모리를 가리켜야 한다.
 - 성능 부담, 잘못된 메모리를 할당할 수 도 있다.
 - 단지 메모리 효울을 위해 쓰인다.
 
 - 길이가 일정한 경우 배열이용
 - 데이터가 적을경우 배열이용

#include <iostream>


using std::cout;
using std::cin;
using std::endl;
 
int main()
{
   
 return 0;
}



레퍼런스-- 별칭??????????
&변수 //선언시
메모리공유


#include <iostream>

using std::cout;
using std::cin;
using std::endl;

struct AAC
{
 int accid;  //계좌번호
 char pw[5];  // 비밀번호
 char name[20]; // 이름
 int bal;  // 잔액
};

void showdata(AAC &a);
void putcash(AAC &a);
void getcash(AAC &a);// &a    레퍼런스 - 메모리 공간의 다른이름을 붙여서 같

이 공유함

int main()
{
 AAC ac={1111, "1234","abc", 50000};

 showdata(ac);
 
 putcash(ac);
 showdata(ac);
 
 getcash(ac);
 showdata(ac);
 
    return 0;
}

void showdata(AAC &a)
{
 
 cout<<"\n\n\n계좌번호 : "<<a.accid<<endl;
 cout<<"잔액     : "<<a.bal<<endl;
}

void putcash(AAC &a)
{
 int temp;
 cout<<"\n\n입금금액 : ";
 cin>>temp;
 a.bal+=temp;
 cout<<temp<<" 원 입금 완료"<<endl;
}
void getcash(AAC &a)
{
 int temp;
 cout<<"\n\n출금 금액 : ";
 cin>>temp;
 a.bal-=temp;
 cout<<temp<<" 원 출금 완료"<<endl;
}

tip. alt +f8  정렬
---------------------------------------------------------------------
class 로 전환
---------------------------------------------------------------------
#include <iostream>

using std::cout;
using std::cin;
using std::endl;

//struct AAC
class AAC
{
public:
 int accid;  //계좌번호
 char pw[5];  // 비밀번호
 char name[20]; // 이름
 int bal;  // 잔액
void showdata()
{
 
 cout<<"\n\n\n계좌번호 : "<<accid<<endl;
 cout<<"잔액     : "<<bal<<endl;
}

void putcash()
{
 int temp;
 cout<<"\n\n입금금액 : ";
 cin>>temp;
 bal+=temp;
 cout<<temp<<" 원 입금 완료"<<endl;
}
void getcash()
{
 int temp;
 cout<<"\n\n출금 금액 : ";
 cin>>temp;
 bal-=temp;
 cout<<temp<<" 원 출금 완료"<<endl;
}
};
/*
void showdata(AAC &a);
void putcash(AAC &a);
void getcash(AAC &a);// &a    레퍼런스 - 메모리 공간의 다른이름을 붙여서 같

이 공유함
*/
int main()
{
 AAC ac={1111, "1234","abc", 50000};

 ac.showdata();
 
 ac.putcash();
 ac.showdata();
 
 ac.getcash();
 ac.showdata();
 
    return 0;
}
/*
void showdata(AAC &a)
{
 
 cout<<"\n\n\n계좌번호 : "<<a.accid<<endl;
 cout<<"잔액     : "<<a.bal<<endl;
}

void putcash(AAC &a)
{
 int temp;
 cout<<"\n\n입금금액 : ";
 cin>>temp;
 a.bal+=temp;
 cout<<temp<<" 원 입금 완료"<<endl;
}
void getcash(AAC &a)
{
 int temp;
 cout<<"\n\n출금 금액 : ";
 cin>>temp;
 a.bal-=temp;
 cout<<temp<<" 원 출금 완료"<<endl;
}*/

---------------------------------------------------------------------
class 로 전환 2
---------------------------------------------------------------------
#include <iostream>

using std::cout;
using std::cin;
using std::endl;

//struct AAC
class AAC
{
public: //struct와 같은 접근을 위해
 //멤버 변수
 int accid;  //계좌번호
 char pw[5];  // 비밀번호
 char name[20]; // 이름
 int bal;  // 잔액
 
 //멤버 함수
 void showdata();
 void putcash();
 void getcash();
};

// 멤버 지정 연산자  ::
//외부함수로 정의할때에는 함수명 앞에 class::멤버함수 형식으로 한다.
void AAC::showdata()
{
 
 cout<<"\n\n\n계좌번호 : "<<accid<<endl;
 cout<<"잔액     : "<<bal<<endl;
}

void AAC::putcash()
{
 int temp;
 cout<<"\n\n입금금액 : ";
 cin>>temp;
 bal+=temp;
 cout<<temp<<" 원 입금 완료"<<endl;
}
void AAC::getcash()
{
 int temp;
 cout<<"\n\n출금 금액 : ";
 cin>>temp;
 bal-=temp;
 cout<<temp<<" 원 출금 완료"<<endl;
}
/*
void showdata(AAC &a);
void putcash(AAC &a);
void getcash(AAC &a);// &a    레퍼런스 - 메모리 공간의 다른이름을 붙여서 같이 공유함
*/
int main()
{
 AAC ac={1111, "1234","abc", 50000};

 ac.showdata();
 
 ac.putcash();
 ac.showdata();
 
 ac.getcash();
 ac.showdata();
 
    return 0;
}
/*
void showdata(AAC &a)
{
 
 cout<<"\n\n\n계좌번호 : "<<a.accid<<endl;
 cout<<"잔액     : "<<a.bal<<endl;
}

void putcash(AAC &a)
{
 int temp;
 cout<<"\n\n입금금액 : ";
 cin>>temp;
 a.bal+=temp;
 cout<<temp<<" 원 입금 완료"<<endl;
}
void getcash(AAC &a)
{
 int temp;
 cout<<"\n\n출금 금액 : ";
 cin>>temp;
 a.bal-=temp;
 cout<<temp<<" 원 출금 완료"<<endl;
}*/

---------------------------------------------------------------------
class 로 전환 lab
---------------------------------------------------------------------


#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
/*
    아래와 같은 main함수가 수행될 수 있는 Triangle 클래스를 디자인해보자.
    
    1. Triangle클래스 디자인  
      
       ▶ 멤버 변수
          밑변, 높이
       ▶ 멤버 함수
          SetArea - 밑변, 높이 초기화 수행
          GetArea - 삼각형의 넓이 리턴
          
    2. 클래스 멤버함수는 외부정의한다.
*/
class Triangle
{
public:
 //멤버 변수
int ba,he;
 //멤버 함수
//class 내의 멤버 변수와 멤버함수내의 변수명은 중복 되면 안된다.
void SetArea(int a, int b);
double GetArea();

};

void Triangle::SetArea(int a, int b)
{
 ba = a; // 밑변
 he = b; // 높이

}
double Triangle::GetArea()
{
 double area;
 area = ba* he/2.0;
 return area;
}

int main()
{
    int base, height;
    cout << "\n *** 삼각형 넓이 구하기 ***\n\n";
    cout << "밑변 : ";
    cin >> base;
    cout << "높이 : ";
    cin >> height;
 
    Triangle tri; //클래스 변수 선언
    tri.SetArea(base, height); //밑변, 높이 초기화
                                 //삼각형 넓이 리턴
    cout << "삼각형의 넓이는 " << tri.GetArea() << "입니다.\n";
    return 0;
}