2015년 7월 6일 월요일

20150707 포인터와 배열의 이해

포인터의 형은 메모리 공간을 참조하는 기준이 된다.(메모리를 어떻게 해석하느냐?)
포인터 연산시 포인터가 가리키는곳의 크기만큼 증가한다!

상수는 코드영역에서 불러온다!(코드 영역은 대부분의 운영체제가 쓰기를 막아놓음)

char str1[]="My String"; // My String은 상수(변수 형태의 문자열)

위는 스택영역과 코드영역에서 My String이 둘다 사용되므로 20바이트의 크기를 가진다.

char *str2="My String"; // 상수형태의 문자열

*str2는 포인터 주소값이므로 4바이트 따라서 14바이트의 크기를 가진다.

문자열을 사용할때 수정할 필요가 없으면 포인터를 사용하여 메모리 낭비를 줄이자!

콘스트상수
printf(주소); // " " = 콘스트역할

int iNum=100;
char *str3="iNum=%d\n";
printf(str3, iNum);

위를 실행시키면 iNum=100

아래의 예제에서 p1과 p5가 가리키는 곳은 같지만 컴파일러의 종류가 코드영역
수정을 허용한다면 주소값이 달라진다!

char *p1="Hi";
char *p2="Hi~";
char *p3="Hi Hello";
char *p4="Hi Hell0~";
char *p5="Hi";

a=10+20;
위의계산은  상수이기에 컴파일시 계산되서 a에 대입된다!
a=a+b;
위의 계산은 변수이기에 실행시 계산되서 a에 대입된다!

댓글 없음:

댓글 쓰기