C++ 배열과 포인터

2014.06.15 06:37

엘카 조회 수:402

참고 문서  

 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; 
} 


번호 제목 날짜 조회 수
43 구조체 포인터 2014.06.15 926
42 구조체의 선언과 데이터 입·출력 2014.06.15 3080
41 함수 포인터 2014.06.15 438
» 배열과 포인터 2014.06.15 402
39 포인터 연산 2014.06.15 383
38 포인터 변수 2014.06.15 411
37 데이터 정렬 2014.06.15 422
36 배열 초기화 2014.06.14 627
35 2차원 배열 2014.06.14 667
34 문자열 처리 함수 2014.06.14 407
33 문자열 입출력 함수 2014.06.14 435
32 접근 수정자 2014.06.14 819
31 전역 변수 2014.06.14 305
30 지역 변수(local variable) 2014.06.14 291
29 변수와 메모리 저장 위치 2014.06.14 423
28 비트 연산자 2014.06.14 284
27 관계 연산자와 논리 연산자 2014.06.14 467
26 증감 연산자 2014.06.14 316
25 printf() 함수의 형식 지정자 2014.06.14 7520
24 열거 형 변수의 이해 2014.06.14 465