c=+
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;
}