2014 C/3월
2014.03.25
솔♡
2014. 3. 25. 15:03
char* const cp = str;
->const는 값을 바꿀 수 없다 는 뜻
->즉 cp는 값을 바꿀 수 없다.
#include <stdio.h> int main() { char str[]="Good morning!"; char* cp1; char* cp2; cp1=str; printf("%c\n",*cp1); printf("%s\n",cp1); printf("%s\n",str); //++cp1; cp1 = cp1+5; printf("%s\n",cp1); printf("%s\n",str+5); cp2 = str; printf("%c\n",str[0]); printf("%c\n",cp2[0]); return 0; } |
G Good morning! Good morning! morning! morning! G G |
*(str+1)
*(cp2+1)
cp2[1]
str[1]
->다 똑같은 결과가 나오는 선언
printf("%c\n",*(str+1)); printf("%c\n",*(cp2+1)); printf("%c\n",cp2[1]); printf("%c\n",str[1]);
->Good morning! 의 o가 출력됨. 다 똑같은 결과가 나온다. |
-> 8번째 줄의 printf(cp1,100,500); 은 cp1에 100과 50의 인자를 대입시키는 명령인데, cp1은 보다시피 포인터변수로
-> str의 주소를 가르키고 있다. 그러면 100과 50의 인자는 cp1이 향하는 str주소 즉 미리 써놓은 "%d %d \n"의 문자열로 향한다.
-> 컴파일로 읽어들일때 %d 와 %d에 각각 100과 50의 인자를 전달한다.
printf형의 기본
int printf(const char *format);
-> format은 없어도 된다는 뜻.
-> 주소값만 있으면 출력이 가능하다는 뜻
-**-
원래 코드영역은 값을 변경할 수 없다.
하지만 변경 된 것은 저정도의 간섭은 허용한다고 판단했기 때문....(해킹위험있음ㅠㅠ)
리눅스에서 실행하면 경고가 뜸
-**-