반응형
메모리를 동적으로 할당하고 해제하기 위해 C에서 malloc과 free가 있었다. C++에서는 new와 delete를 사용한다.

 

< new와 delete >

- new 연산자를 사용할 경우 명시적 형변환을 할 필요가 없다.

 int *p=(int *) malloc(sizeof(int));       // 4바이트 할당

 int *p=(int *) malloc(sizeof(int)*3);   // 12바이트(int형 3개를 갖는 배열) 할당

 int *p=new int;        // 4바이트 할당

 int *p=new int[3];   // 12바이트(int형 3개를 갖는 배열) 할당

- 메모리 할당과 동시에 초기화가 가능하다(단, 배열 형태로 할당받을 경우에는 초기화가 여전히 불가능).

 int *p=new int(100);     // int형 변수 하나를 할당받으면서 값을 '100'으로 초기화.

- new를 사용하여 메모리를 할당한 경우에는 delete 연산자를 사용해서 메모리 해제를 해야한다.

 delete p;

 delete [] p;

 

 

--------------------------------------------------------------------------------------------------------------------------

ex 10. (int형 변수 하나의 동적 할당 및 초기화)

#include <iostream>
using namespace std;

 

int main(void){
   int *p=new int(100);      
// int형 변수 동적 할당 및 100으로 초기화

 

   cout<<"포인터 변수의 주소 : "<<&p<<endl;
   cout<<"포인터 변수의 값 : "<<p<<endl;
   cout<<"동적 변수의 값 : "<<*p<<endl;

 

   delete p;

 

   return 0;
}

   

 

 ex 11.  int형 변수 5개를 동적으로 할당받고 각각 해당 원소의 인덱스로 값 채우기. (배열의 동적 할당)

#include <iostream>
using namespace std;

 

int main(void){
   int *p=new int[5];   
// int형 변수 5개 동적 할당

 

   for(int i=0; i<5; i++)
      p[i]=i;

 

   for(int i=0; i<5; i++)
      cout<<p[i]<<" ";
   cout<<endl;

 

   delete [] p;

 

   return 0;
}

 

ex 12. (2차원 배열의 동적 할당)

#include <iostream>
using namespace std;

 

int main(void){
   int **p;                  // int형 포인터에 대한 포인터
   p=new int *[4];    // p[0], ..., p[3]이 int형 포인터
 
   int i, j;

 

   for(i=0; i<4; i++)
      p[i]=new int[5];
 
// 각 포인터를 통해 int형 변수 5개 생성(4행 5열)

 

   for(i=0; i<4; i++){
      for(j=0; j<5; j++)
         p[i][j]=i+j;
   }

 

   for(i=0; i<4; i++){
      for(j=0; j<5; j++)
         cout<<p[i][j]<<"\t";
      cout<<endl;
   }

 

   for(i=0; i<4; i++)
     
delete [] p[i];
   delete [] p;

 

   return 0;
}

   

  

ex 12_1. (2차원 배열의 동적 할당) - delete 한 번만 해주도록.

#include <iostream>
using namespace std;

 

int main(void){
   int (*p)[5]=new int[4][5];     
// 4행 5열의 2차원 배열 할당

 

   for(int i=0; i<4; i++){
      for(int j=0; j<5; j++)
         p[i][j]=i+j;
   }

 

   for(int i=0; i<4; i++){
      for(int j=0; j<5; j++)
         cout<<p[i][j]<<"\t";
      cout<<endl;
   }

 

   delete [] p;      // 한 번만 delete(해제)해주면 됨.

 

   return 0;
}

 

 

 

 

 


'Computer Languages > C | C++' 카테고리의 다른 글

string을 char로 취급하기  (0) 2010.10.21
[펌]private, proteted, public 의 차이  (3) 2010.10.12
포인터 개념  (0) 2010.10.11
3x3 행렬의 곱  (0) 2010.10.08
링크드리스트(노드추가/삭제)  (0) 2010.10.08
반응형



<결과>


참조자 사용
 1)참조하고자 하는 어떤 객체를 미리 알고있을경우.
 2)다른 객체를 바꾸어 참조할 일이 결코 없을경우.
 3)포인터를 사용하면 문법상 의미가 어색해지는 연산자를 구현할 경우

위의 경우를 제외하고는 포인터사용.

출처 :: More Effective C++

'Computer Languages > C | C++' 카테고리의 다른 글

[펌]private, proteted, public 의 차이  (3) 2010.10.12
[펌] new와 delete  (0) 2010.10.11
3x3 행렬의 곱  (0) 2010.10.08
링크드리스트(노드추가/삭제)  (0) 2010.10.08
cast연산자  (0) 2010.10.04
반응형

허브가 최하층인 물리계층이라는 말은 우선 수정해야겠군요.
물리계층이 들어가는 장비능 없죠. 우선 물리적이라는 말뜻은 그런뜻이 아니니깐.
케이블, RJ-45 Jack, 아웃렛, 패치팬넬 등이 물리계층에 사용되는 제품이죠.
물리계층은 말 그대로 전원이 안들어가는 제품들의 모임입니다. 장비라고는 못하고
제품들이라고 해야 겠네요.

허브는 데이타 링크에 관계된 장비이죠. 장비란, 전원이 들어가서 전기신호를 발생하는
제품을 말합니다. 데이타가 움직이고, 연결되는 것은 전기신호를 발생하기 때문이고, 전기신호가 데이타를 가지고 있으므로 데이타 링크장비로 할수 있죠. 데이타링크이 장비는 이외에도 스위치 허브, 랜카드 등등이 있죠.

라우터는 네트워크 계층의 장비이죠. 다시 말해서 네트워크와 네트워크 그룹을 연결하수 있는 장비이죠. 여기서 말하는 네트워크란, 동일한 IP대역의 망을 의미합니다.
앞서 다른 님의 설명되로 라우팅을 하는 장비이죠.
아마 네트워크 스위치는 Layer 3 스위치를 의미하는 것 같군요.
일반적으로 라우터는 LAN과 WAN을 연결할 수 있는 장비이죠. LAN과 WAN은 쉽게
생각해서 내부망과 외부망(KT, 데이콤과 같은 서비스업체 망)을 연결할 때 사용되는
장비입니다.
Layer 3 Switch(네트워크 스위치)는 LAN(내부망)환경에서 IP대역이 255(C class기준)개를 넘어서 다른 대역을 사용할 때 라우팅을 하여서 네트워크 사용할 수 있도록 하는 장비입니다.

백본 스위치는 보통 위의 기능들을 모두 포함한 장비의 명칭입니다. 보통 L2/L3/L4까지도 지원이 가능하죠. 가끔 L3까지만, 지원되는 백본스위치도 있지만, 요즘은 L4기능을
탑재한 장비가 보편적이기 때문에 L4까지 지원이 가능하다고 해야죠. 백본스위치는
앞의 기능(S/W)기능들을 모두 포함하고, H/W기능까지 포함하는 장비 입니다. 광케이블을 지원하고, 지원하는 속도도 10Mbps ~ 10Gbps(10,000Mbps)까지 지원합니다. 또한, 각종 Protocol을 지원하고, 규약들도 지원하죠. Ethernet, ATM, FDDI, WAN등등 지원을
하죠. 또한, 처리 능력또한 대단하죠. 처리능력이 Switch Fabric이라고 하여서 보통 128Gbps이상 1.2Tbps(1,2000Gbps)까지 지원이 가능하죠. 보통 스위치 허브가 2.4Gbps의 처리 능력을 가지고 있는거에 비하면 대단하죠.
결론적으로 백본스위치는 대용량에 모든 사양를 지원하는 장비입니다.

출처 :: 네이버 지식in
반응형

끄적..

3x3 행렬의 곱을 C언어로 코딩해보았습니다.

소스코드

#include<iostream>
using namespace std;
#define ROW 3
#define COL 3

int c[ROW][COL]={0,};


int *matrixMultiply()///////행렬 곱셈 함수
{
  int i,j,k;  /////for문 돌리기위한 선언
  int a[ROW][COL], b[ROW][COL];

 //  ********행렬A**********
   cout<<"A행렬"<<endl;
   for(i=0;i<ROW;i++)//A입력
   {
  for(j=0;j<COL;j++)
  {
   cin>>a[i][j];
  }
   }
   //********행렬B**********
   cout<<"B행렬"<<endl;
   for(i=0;i<ROW;i++)//B입력
   {
  for(j=0;j<COL;j++)
  {
   cin>>b[i][j];
  }
   }
   //********행렬C**********
   cout<<"행렬A x 행렬B"<<endl;
   for(i=0;i<ROW;i++)
   {
   for(j=0;j<COL;j++)
  {
   for(k=0;k<3;k++)
   {
    c[i][j]+=a[i][k]*b[k][j]; 
   }
  }
   }

   return *c; //2차원배열을 리턴할때는 reference값을 리턴해야하므로 포인터처리함
}



int main()
{
  int i,j; /////for문 돌리기위한 선언
  matrixMultiply();

   for(i=0;i<ROW;i++){
  cout<<"\n";
  for(j=0;j<COL;j++)
   cout<<"  "<<*(*(c+i)+j);
  cout<<"\n";
   }

}

'Computer Languages > C | C++' 카테고리의 다른 글

[펌] new와 delete  (0) 2010.10.11
포인터 개념  (0) 2010.10.11
링크드리스트(노드추가/삭제)  (0) 2010.10.08
cast연산자  (0) 2010.10.04
Hello world  (0) 2010.09.19

+ Recent posts