참고 문서 |
---|
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; }
댓글 0
번호 | 제목 | 날짜 | 조회 수 |
---|---|---|---|
43 | 구조체 포인터 | 2014.06.15 | 931 |
42 | 구조체의 선언과 데이터 입·출력 | 2014.06.15 | 3084 |
41 | 함수 포인터 | 2014.06.15 | 447 |
» | 배열과 포인터 | 2014.06.15 | 406 |
39 | 포인터 연산 | 2014.06.15 | 384 |
38 | 포인터 변수 | 2014.06.15 | 414 |
37 | 데이터 정렬 | 2014.06.15 | 424 |
36 | 배열 초기화 | 2014.06.14 | 630 |
35 | 2차원 배열 | 2014.06.14 | 670 |
34 | 문자열 처리 함수 | 2014.06.14 | 412 |
33 | 문자열 입출력 함수 | 2014.06.14 | 442 |
32 | 접근 수정자 | 2014.06.14 | 824 |
31 | 전역 변수 | 2014.06.14 | 308 |
30 | 지역 변수(local variable) | 2014.06.14 | 295 |
29 | 변수와 메모리 저장 위치 | 2014.06.14 | 428 |
28 | 비트 연산자 | 2014.06.14 | 288 |
27 | 관계 연산자와 논리 연산자 | 2014.06.14 | 472 |
26 | 증감 연산자 | 2014.06.14 | 319 |
25 | printf() 함수의 형식 지정자 | 2014.06.14 | 7522 |
24 | 열거 형 변수의 이해 | 2014.06.14 | 465 |