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()
{
}