포인터 연산시 포인터가 가리키는곳의 크기만큼 증가한다!
상수는 코드영역에서 불러온다!(코드 영역은 대부분의 운영체제가 쓰기를 막아놓음)
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에 대입된다!
댓글 없음:
댓글 쓰기