C++ 배열과 포인터

2014.06.15 06:37

엘카 조회 수:408

참고 문서  

 1차원 배열 

 포인터 변수에 1차원 배열의 메모리 주소를 할당하는 예 

int num[5] = {10, 20, 30, 40, 50}; 

int *ptr;    /* 포인터 변수 ptr의 선언 */ 

ptr = num;   /* 포인터 변수에 배열의 선두 메모리 주소를 할당 */ 


1차원 배열과 포인터와의 관계 

#include <stdio.h> 
 
int main(void) 
{ 
  int num[5]={10,20,30,40,50};   
  int *ptr;    
 
  ptr = num;    
 
  printf("%p\t %p \t %p \n", num, &num[0], ptr);  
  
 
 
 
  printf("%d, %d, %d \n", num[0], num[1], num[2]);    
  printf("%d, %d, %d \n", ptr[0], ptr[1], ptr[2]);    
  printf("%d, %d, %d \n", *(ptr+0), *(ptr+1), *(ptr+2));    
  printf("%d, %d, %d \n", *(num+0), *(num+1), *(num+2));      
  printf("%d, %d, %d \n ", *ptr+0, *ptr+1, *ptr+2);  //값의 연산  
 
  return 0;  
} 
// ※ 위 예제에서 num[i]와 *(num+i), *(ptr+i)는 같은 내용이다. 


1차원 배열과 포인터와의 관계 

#include <stdio.h> 
 
int main(void) 
{ 
   
  int *ptr, i;    
  int count[5]={10,20,30,40,50};   
 
  ptr = count;    
  for(i=0;i<5;i++)     
     printf("%d, ", *ptr++); // *ptr을 먼저 %d에 나타낸후 ++연산수행     
  printf("\n"); 
 
  /* 다음과 같이 작성하면 오류가 된다. 
     for(i=0;i<5;i++)     
        printf("%d, ", *count++);   
        // count는 배열의 시작주소를 가지는 상수이므로 값의 변경이 불가능 
     printf("\n");                    
  */     
  return 0;   
} 



 2차원 배열과 포인터의 관계 

int  num[4][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; 

int  *ptr1; 

ptr1 = num; 


 2차원 배열과 포인터의 관계 

#include <stdio.h> 
 
int main(void) 
{ 
 
  int num[4][3]  
     = { 1,2,3,4,5,6,7,8,9,10,11,12 };   
  int *ptr1, i, j;   
 
  for (i=0; i<4; i++)           
  {     
     for(j=0; j<3; j++)       
        printf("%p, %d \t",&num[i][j], num[i][j]);      
     printf("\n");   
  }   
  printf("\n");    
 
  ptr1 = &num[0][0];    
  printf("&num[0][0] : %p, ptr1 : %p \n", &num[0][0], ptr1);
 
 for (i=0; i<4; i++)           
  {     
     for(j=0; j<3; j++)     
     {       
        printf("%p, %d\t",ptr1, *ptr1++); /* 포인터 변수로 접근 */ 
   
     }      
     printf("\n");   
  }   
  printf("\n");   
 
  return 0; 
}   

 포인터 배열 

   - 포인터 자료형의 데이터, 즉 메모리의 주소(동일한 자료형에 대한 포인터)들을 연속된 

      메모리 공간에 모아 놓은 것. 

    - 포인터 배열의 원소 각각은 주소를 보관하는 포인터 변수가 된다. 

    - 포인터 배열의 원소 각각은 선언 자료형과 상관 없이 4 bytes의 크기(32비트 운영체제  

      기준)를 가진다. 

    - 포인터 배열의 선언 자료형은 포인터 배열의 원소가 가리키는 자료의 자료형을 의미 


포인터 배열 선언 형식 

자료형  *변수이름[크기]; 

자료형  *변수이름1[크기], *변수이름2[크기], ... , *변수이름n[크기]; 


포인터 배열의  선언 예 

char  *myargv[3];     /* 문자형 포인터 배열 선언 */ 

int   *temp[3];       /* 정수형 포인터 배열 선언 */ 



 문자열 포인터 배열의 이해 

#include <stdio.h> 
 
int main(void) 
{ 
  // 2차원 문자 배열   
  char names[5][20]  
    = {"kim", "kim weon sun", "sun", "lee", "park"};   
  // 포인터 배열   
  char *p_names[5]  
    = {"kim", "kim weon sun", "sun", "lee", "park"};   
  int i;   
   
  printf("문자배열 \t \t \t 포인터배열 \n");   
  for( i=0; i<5; i++)      
     printf("%d. %p, %-10s \t %p, %-10s \n",    
                   i,  names[i],  names[i],  p_names[i],  p_names[i]); 
  return 0; 
} 


번호 제목 날짜 조회 수
24 구조체 포인터 2014.06.15 933
23 구조체의 선언과 데이터 입·출력 2014.06.15 3085
22 함수 포인터 2014.06.15 458
» 배열과 포인터 2014.06.15 408
20 포인터 연산 2014.06.15 385
19 포인터 변수 2014.06.15 415
18 데이터 정렬 2014.06.15 425
17 배열 초기화 2014.06.14 631
16 2차원 배열 2014.06.14 671
15 문자열 처리 함수 2014.06.14 413
14 문자열 입출력 함수 2014.06.14 442
13 접근 수정자 2014.06.14 825
12 전역 변수 2014.06.14 309
11 지역 변수(local variable) 2014.06.14 296
10 변수와 메모리 저장 위치 2014.06.14 429
9 비트 연산자 2014.06.14 289
8 관계 연산자와 논리 연산자 2014.06.14 474
7 증감 연산자 2014.06.14 339
6 printf() 함수의 형식 지정자 2014.06.14 7523
5 열거 형 변수의 이해 2014.06.14 466