5. 포인터
3) 연산자
▣ 연산자
#include <stdio.h> int main() { int a = 1; int b = 2; char c = 'z'; int *pa; int *pb; char *pc; pa = &a; pb = &b; pc = &c; printf("pa : 0x%08X %d\n", pa, *pa); printf("pb : 0x%08X %d\n", pb, *pb); printf("pc : 0x%08X %d\n", pc, *pc); return 0; }
- & 연산자 (주소 연산자)
☞ 주소를 구해줌 (변수 -> & -> 상수)
- * 연산자 (역참조 연산자)
☞ 값을 알아냄 (변수 <- * <- 상수)
☞ 번지
- 스택
- 그냥 변수는 역참조 (*) 연산 불가
☞ 제약 심함
☞ 포인터 변수만 가능
☞ 역참조가능 횟수도 제약. 역참조 수 만큼 * 연산자를 변수 앞에 달아줌.
4) 배열
▣ 배열
- 같은 형태의 구조화된 Data
- 하나의 변수명으로 여러개의 변수를 표현
- 구조체와 비슷하지만 안에 멤버들이 단 하나의 데이터 타입으로 고정.
- 선언 : char a[10];
☞ char 형태의 저장공간이 총 10개 생김 (0 ~ 9)
☞ a : 배열명 (= 배열의 시작주소를 나타내는 상수값)
☞ 10 : 배열의 크기 (반드시 상수 형태여야만 함)
ex) int a = 10; char b[a]; (x) -> 컴파일러가 스택프레임 할당할 때 a의 값을 모르니까 불가함.
- a[0]은 하나의 변수처럼 사용됨. 정확히는 하나의 식임.
#include <stdio.h> int main() { int i; int nArray[5] = { 0 }; for (i = 0; i < 5; i++) nArray[i] = i; return 0; }
▣ 문자 배열
- 문자열을 표현하기 위해서는 char 형 배열 사용
- 문자열 끝에는 NULL('\0')이 자동으로 추가됨.
-> 배열의 크기 : 필요한 문자 수 + 1
char arr[5] = "Test";
char arr[ ] = "Test";
char arr[5] = {'T', 'e', 's', 't'};
char arr[ ] = {'T', 'e', 's', 't', '\0'};
- 마지막 줄에서 '\0'를 추가하지 않으면 4칸짜리 배열이 만들어짐.
▣ 심화
- 추후 추가 예정
▣ 포인터와 배열
- 역참조 연산자에 한해서만 + 연산자는 변수형 크기만큼 곱해지면서 보정이 됨.
☞ *(ptr + 1) == *(ptr + 1*sizeof(int))
- 괄호의 역할이 중요!
☞ *ptr + 1은 ptr의 주소 번지 (값) + 1 이므로 2가 됨.
i2sec 대구지점 23기 수료생.
'해킹&보안 > C언어' 카테고리의 다른 글
[D+22] 문자열 처리 함수 (0) | 2017.03.19 |
---|---|
[D+19] 포인터 (1) (0) | 2017.03.07 |
[D+18] 파일 입출력 심화(스테가노그래피) (2) | 2017.03.06 |
[D+17] 함수 (0) | 2017.03.02 |
[D+16] 파일 입출력 (2) (0) | 2017.03.01 |