2008. 8. 18. 14:39

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