티스토리 뷰
- 포인터와 배열
- char 포인터
- 포인터는 문자열 처리에 효과적
- 문자열 처리에 char형 포인터 사용
- char *cp = "COMPUTER";
- char 포인터의 기억공간 표현
- char *cp = "COMPUTER";
- cp는 문자열의 시작주소를 갖는다.
- 따라서 값을 참조할 떄와는 달리 포인터변수 cp에 주소를 치환하지 않는다.
- char *cp = "COMPUTER";
- char 포인터
- 포인터와 배열의 관계
- 포인터와 배열의 관계
- 포인터를 이용한 1차원 배열의 참조
- char s[] = "SCIENCE";
- char *cp;
- cp = s; -> 포인터 cp를 이용하여 배열 s의 내용을 참조
- 배열은 포인터의 일부분
- 모든 배열은 포인터로 표현 가능
- cp+1 <-> &s[1]
- *(cp+1) <-> s[1]
- 포인터를 이용한 2차원 배열의 참조
- int a[2][3];
- int *pt;
- pt = a; --> pt = a[0]; 또는 pt=&a[0][0]과 동일
- a: 배열 a[2][3]의 시작 주소
- a[0]: a[0]행의 시작 주소
- a[1]: a[1]행의 시작 주소
- 포인터와 배열은 서로 호환적
- int A[] = {10, 20, 30, 40, 50};
- int *p, i; --> A+i == &A[i], A[i] == *(A+i), *(p+i) == p[i]
- 포인터를 이용한 1차원 배열의 참조
- 포인터와 배열의 관계
#include <stdio.h>
void main(){
char A[] = "ARRAY";
char *p = "POINTER";
int i;
for(i=0; i<5; i++) printf("*(A+%d) : %c\n", i, *(A+i));
--> 배열을 포인터 형식으로 참조
for(i=0; i<7; i++) printf("p[%d]: %c\n", i, p[i]);
--> 포인터를 배열 형식으로 참조
}
-
-
- 포인터와 배열의 관계
- 포인터와 배열의 값 변경
- 배열 A[i]에서 A++, A--와 같이 값 변경 불가
- 포인터 *p에서 p++, p--와 같이 값 변경 가능
- 배열과 포인터의 기억공간 확보
- 배열
- 기억공간 중 자료영역을 고정적으로 확보
- 포인터
- 기억공간 중 자료영역을 유동적으로 확보
- 필요할 때만 자료용 기억 공간을 확보
- 자료의 개수가 가변적인 경우 효과적
- 기억공간 중 자료영역을 유동적으로 확보
- 포인터가 배열보다 활용의 폭이 넓다.
- 배열
- 포인터와 배열의 값 변경
- 포인터와 배열의 관계
-
- 포인터 배열
- 포인터 배열 => 포인터의 집합
- 포인터가 여러 개 사용될 때 포인터 배열로 선언
- 주로 문자열 배열 처리에 사용
- char *name1, *name2, *name3; --> char *name[3];
- 포인터 배열 선언과 기억공간 표현
- char *PA[4];
- PA[0] = "ELECTRONICS"";
- 첫번째 문자인 "E"를 가리키고 있음
- PA[1] = "DATA";
- "D"를 가리킴
- PA[2] = "PROCESSING";
- PA[3] = "SYSTEM";
- PA[0] = "ELECTRONICS"";
- 2차원 배열과 동일
- 2차원 배열에 비해 기억고간 절약효과(포인터배열은 자료의 크기 만큼 기억공간 할당)
- char *PA[4];
- 포인터 배열 => 포인터의 집합
#include <stdio.h>
void main(){
int a[] = {1,2,3,4};
int b[] = {5,6,7,8};
int *PA[2];
PA[0] = a;
PA[1] = b;
printf("*(PA[0]) = %d\n", *(PA[0])); // 1
printf("*(PA[0]+1) = %d\n", *(PA[1]+1)); // 2
printf("*PA[1] = %d\n", *PA[1]); // 5
printf("*PA[1]+15 = %d\n", *PA[1]+15); //20
}
- 이중 포인터
- 이중 포인터의 개념
- Pointer to pointer
- 자료가 있는 곳을 이중으로 가리키는 포인터
- 이중 포인터가 가리키는 주소로 가보면 자료가 아닌 주소 값이 들어 있고, 그 주소에 자료가 들어 있음
- 이중 포인터의 선언
- 형식: int **p;
- 의미: 포인터 변수에 다시 포인터를 지정하는 것으로서, 포인터에 대한 포인터이다.
- 이중 포인터의 선언 예
- int **p;
- p: 기억공간 주소
- *p: 주소 p에 수록되어 있는 값. 이 값이 주소로 사용됨
- **p: 주소가 *p인 곳에 수록되어 있는 값. 즉 int형 자료
- int **p;
- 이중 포인터의 개념
#include <stdio.h>
void main(){
char a = 'A', *p, **pp;
p = &a;
pp = &p;
printf("**pp=%c", **pp); // **pp=A
}
'C' 카테고리의 다른 글
[C] 구조체와 공용체 (0) | 2021.05.08 |
---|---|
[C] 구조체 (0) | 2021.04.30 |
[c] 포인터 (0) | 2021.04.21 |
[C] 배열 (0) | 2021.04.14 |
[C] 입.출력 함수와 연산자 (0) | 2021.03.25 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- javascript
- BFS
- 세마포어
- 자료구조
- 인접행렬
- 클래스
- 동적프로그래밍
- 구조체
- 이진탐색
- 소프트웨어
- 퀵정렬
- Stack
- 병행프로세스
- C++
- 최단경로
- 배열
- 교착상태
- Java
- 운영체제
- react
- dfs
- 알고리즘
- 인접리스트
- stackframe
- 입출력장치
- server side rendering
- 재귀함수
- 스텍
- C
- client side rendering
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함