분류 전체보기 (505) 썸네일형 리스트형 Chapter 7. strcpy()의 비밀 Chapter 7.strcpy()의 비밀 7_1.c #include #include main() { //char *imsip; char imsi[10]; //strcpy(imsip, "archie"); strcpy(imsi, "archie"); puts(imsip); } gcc -o 7_1 7_1.c ./7_1 //세그멘테이션 오류 archie 포인터변수로 선언된 imsip에 strcpy()를 이용하여 문자열을 할당할 경우 위와같이 메모리참조 에류가 발생한다. 배열을 이용한strcpy() strcpy(imsi, "archie"); 배열로 선언된imsi에 strycpy()를 이용하여 문자열을 할당하는 경우 각각의 배열요소에 문자열의 각 문자 하나씩 할당된다. imsi[0] = 'a', imsi[1] = '.. Chapter 8. 뒤죽박죽 포인터 Chapter 8.뒤죽박죽 포인터 int imsi[3] = {5, 3, 8}; printf("%d %d %d\n", imsi[0], imsi[1], imsi[2]); printf("%d %d %d\n", *imsi, *(imsi + 1), *(imsi + 2)); 위의 imsi[0]과 *imsi에 대해서 잘못된 개념을 갖고있다면 정확히 알아보자. "imsi[0]은 배열이고 *imsi는 포인터이다" 라고생각해서는 안된다. imsi[0]은 포인터 변수를 배열적으로 표현한 것이고 *imsi는 포인터 변수를 포인터 변수답게 표현한 것이다. imsi[0]은 imsi가 가리키는 곳에서 얼마나 떨어져 있는지를 첨자를 통해서 표시한 것뿐, 절대 배열이 아님을 명심하자. 8_1.c #include main() { int.. Chapter 9. 포인터의 개념을 깨는 `0` Chapter 9.포인터의 개념을 깨는'0' 포인터 변수는주소 값을 저장할 수 있는 변수라는 의미이다. 누차 강조했지만포인터 변수에는 주소값 이외에는 어떠한 값도 할당 될 수 없다. 따라서, 포인터 변수에 할당되어 있는 값은 주소 값이 되는 것이다. 9_2.c #include main() { char*imsip; imsip= 0; printf("%#010x\n", imsip); } gcc-o9_2 9_2.c .9_2 0000000000 널 포인터 어느곳도 가리키고 있지 않는 주소 값, 어느 곳도 가리키지 않는 포인터, 할당되지 않은 포인터를 대표하는 것이 널 포인터다. 따라서, 널포인터를 이용하여 값을 출력하려고 하면 문제가 발생한다. 9_3.c #include main() { char *imsip; i.. Chapter 4. 문자열과 포인터 Chapter 4. 문자열과 포인터 C언어는 문자열을 문자 배열로 정의한다. a,'a', "a"의 차이 문자열은 반드시 NULL 문자로 끝나도록 정해져 있으므로"a"는 '\0'을 포함하고 있다. 4_1.c #include main() { char *imsip; char imsi; imsip = 'a'; (1) imsip = "a"; (2) imsi = 'a'; (3) imsi = "a"; (4) } gcc -o 4_1 4_1.c 4_1.c: In function ‘main’: 4_1.c: 8: warning: assignment makes pointer from integer without a cast 4_1.c: 12: warning: assignment makes integer from pointer.. Chapter 5. 포인터의 포인터 Chapter 5.포인터의 포인터 포인터의 포인터는 다루는 대상체가 포인터인 포인터 변수를 뜻한다. 즉, 포인터들을 다루는 포인터라는 이야기다. 포인터의 포인터 변수 정의 char**imsipp; 어디에 사용 하는가 매개변수가 포인터 배열인 함수를 작성하기 위해 사용 명령행 인자에서 사용 초기화 5_1.c #include main() { char *imsip[3], **imsipp; int one, *two, **three; imsip[0] = "imsi"; imsip[1] = "temp"; imsip[2] = "jamgan"; imsipp = imsip; two = &one; three = &two; } 포인터의포인터 변수에서는 다음을 명확히 알아두어야 한다. three 포인터의 포인터 변수이므로 주소.. Chapter 6. scanf()와 fgets() Chapter 6. scanf()와fgets() scanf()는 숫자를 받아들일 때에만 fgets()는 문자열을 받아들일 때에만 사용한다. intscanf(constchar *format, ...); 첫번째 인자는 문자열 포인터이고 두번째 인자는"가변 인자" 이다. 6_1.c #include #include main() { char *name; name = (char *)malloc(sizeof(char) * 20); printf("Input your name : "); scanf("%s", name); puts(name); } gcc -o 6_1 6_1.c ./6_1 Input your name : Park Nara Park 다른 문자열도 출력하고 싶다면 char 변수를 각각 선언하고 scanf("%s.. Chapter 2. 1차원 배열과 포인터 Chapter 2. 1차원 배열과 포인터 배열명은 주소를 뜻한다. 배열명은 배열의 첫번째 배열 요소의 주소를 뜻한다. 2_7.c #include main() { int imsi[3] = {5,3,7}; int *imsip; imsip = imsi; printf("%#010x %#010x %#010x\n", imsi, &imsi[0], imsip); printf("*imsip : %d\n",*imsip); } gcc -o 2_7 2_7.c ./2_7 0xbf927bf4 0xbf927bf4 0xbf927bf4 *imsip : 5 포인터+ 정수의의미 주소에 정수 값을 더하는 것이 허용된다는 사실에 주목. imsip +1은imsip가가리키는배열 요소 바로 다음 배열 요소를 가리킨다. imsip에 정수 값을 더할.. Chapter 3. 2차원 배열과 포인터 Chapter 3. 2차원 배열과 포인터 미리보기 3_1.c #include main() { int imsi[3][2] = {{6,3}, {9,1}, {7,2}}; int (*imsip)[2]; int i,j; imsip = imsi; for(i=0;i 이전 1 ··· 16 17 18 19 20 21 22 ··· 64 다음