본문으로 바로가기

[D+20] 포인터 (2)

category 해킹&보안/C언어 2017. 3. 8. 19:08
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

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