- Part2-4
4. 1 포인터와 1 차원배열 4. 2 포인터와 2 차원배열 4. 3 포인터배열 4. 4 포인터와문자그리고포인터와문자열
4.1 포인터와 1 차원배열
4.1 1 (1/16)- - - [4-1.c ] #include <stdio.h> int main(void) { int array[3]={10, 20, 30}; } prind("%x %x %x \n", array, array+0, &array[0]); prind( %x %x \n", array+1, &array[1]); prind( %x %x \n", array+2, &array[2]); prind("%d %d %d \n", sizeof(array), sizeof(array+0), sizeof(&array[0])); return 0; array == array+0 ==&array[0] array+1 ==&array[1] array+2 ==&array[2] 10 20 30 array[0] array[1] array[2]
4.1 1 (2/16)- - - [4-1.c ] prind("%d %d %d \n", sizeof(array), sizeof(array+0), sizeof(&array[0]) ); array 10 20 30 4 4 4 array+0 10 4 sizeof(array+0) 4 sizeof(array) 12
4.1 1 (3/16)- - - [4-4.c ] 1 ü #include <stdio.h> int main(void) { int array[3]={10, 20, 30}; int* p=null; } p=array; // p=&array[0]; prind("%x %x %x \n", p, p+0, &p[0]); prind("%x %x \n", p+1, &p[1]); prind("%x %x \n", p+2, &p[2]); return 0;
4.1 포인터와 1차원 배열 (4/16)- - - [4-4.c 분석]
4.1 1 (5/16)- - - [4-5.c ] 1 ü * #include <stdio.h> int main(void) { int array[3]={10, 20, 30}; int* p=null; p=array; // p=&array[0]; } // * prind("%d %d %d \n", *p, *(p+0), *&p[0]); // *& prind("%d %d \n", *(p+1), *&p[1]); // *& prind("%d %d \n", *(p+2), *&p[2]); // *& return 0;
4.1 포인터와 1차원 배열 (6/16)- - - [4-5.c 분석]
4.1 1 (7/16)- - - [4-6.c ] #include <stdio.h> int main(void) { int array[3]={10, 20, 30}; int i=0; int* p=null; p=array; // p=&array[0]; for(i=0; i<3; i++) prind("%d %d %d \n", *(p+i), *&p[i], p[i] ); << 1>> *(p+i) == *&p[i] == p[i] prind("- - - - - - - - - - - - - - - - - - - - \n"); << 2>> *(array+i)==*&array[i]==array[i] for(i=0; i<3; i++) prind("%d %d %d \n", *(array+i), *&array[i], array[i]); } return 0;
4.1 1 (8/16)- - - [4-6.c ] array p << 1>> *(p+i) == *&p[i] == p[i] p == &p[0] p+1 == &p[1] p+2 == &p[2] 10 20 30 *(p+0)==*&p[0]==p[0] *(p+1)==*&p[1]==p[1] *(p+2)==*&p[2]==p[2] array p << 2>> *(array+i)==*&array[i]==array[i] array == &array[0] array+1 == &array[1] array+2 == &array[2] 10 20 30 *(array+0)==*&array[0]==array[0] *(array+1)==*&array[1]==array[1] *(array+2)==*&array[2]==array[2]
4.1 1 (9/16)- - - [4-7.c ] ü - 4, - #include <stdio.h> int main(void) { int array[3]={10, 20, 30}; int* p=null; p=array; // prind("%d %d %d \n", array[0], array[1], array[2]); prind("%d %d %d \n", *(array+0), *(array+1), *(array+2)); prind("%d %d %d \n", p[0], p[1], p[2]); prind("%d %d %d \n", *(p+0), *(p+1), *(p+2)); } prind(" : %d : %d \n", sizeof(array), sizeof(p)); return 0; 12 4
4.1 1 (10/16)- - - [4-8.c ] int array[3]={10, 20, 30}; int* p=null; 7 11 15 p=array; // p=&array[0]; prind("%d %d %d \n", p[0], p[1], p[2]); prind("%d %d %d \n", *p, *(p+1), *(p+2)); p=array+1; // p=&array[1]; prind("%d %d %d \n", p[- 1], p[0], p[1]); prind("%d %d %d \n", *(p- 1), *p, *(p+1)); p=array+2; // p=&array[2]; prind("%d %d %d \n", p[- 2], p[- 1], p[0]); prind("%d %d %d \n", *(p- 2), *(p- 1), *p);
4.1 1 (11/16)- - - [4-8.c ]
4.1 1 (12/16)- - - [4-9.c ] int array[3]={10, 20, 30}; int* p=null; p=array; // p=&array[0]; prind("%d %d %d \n", p[0], p[1], p[2]); prind("%d %d %d \n", *p, *(p+1), *(p+2)); prind("- - - - - - - - - - - - - - \n"); p=p+1; // p=&array[1]; prind("%d %d %d \n", p[- 1], p[0], p[1]); prind("%d %d %d \n", *(p- 1), *p, *(p+1)); prind("- - - - - - - - - - - - - - \n"); p=p+1; // p=&array[2]; prind("%d %d %d \n", p[- 2], p[- 1], p[0]); prind("%d %d %d \n", *(p- 2), *(p- 1), *p); 0) prind("- - - - - - - - - - - - - - \n"); return 0;
7 9 13 17 4.1 1 (13/16)- - - [4-10.c ] int array[3]; int* p=null; p=array; *p = 10; prind("%d %d %d \n", p[0], p[1], p[2]); prind("- - - - - - - - - - - - - - \n"); *(p+1)=20; prind("%d %d %d \n", p[0], p[1], p[2]); prind("- - - - - - - - - - - - - - \n"); *(p+2)=30; prind("%d %d %d \n", p[0], p[1], p[2]); prind("- - - - - - - - - - - - - - \n"); prind("%d %d %d \n", *p, *(p+1), *(p+2)); prind("%d %d %d \n", p[0], p[1], p[2]); prind("- - - - - - - - - - - - - - \n");
4.1 1 (14/16)- - - [4-10.c ] array P array P array P array 10?? p[0] P[1] P[2] array 10 20? p[0] P[1] P[2] array 10 20 30 p[0] P[1] P[2] 7,9 13 17 *p == *(p+0) == p[0] *array == *(array+0) == array[0] *(p+1) == p[1] *(array+1) == array[1] *(p+2) == p[2] *(array+2) == array[2]
7 8 12 13 17 18 4.1 1 (15/16)- - - [4-11.c ] int array[3]; int* p=null; p=array; *p=10; prind("%d %d %d \n", p[0], p[1], p[2]); prind("- - - - - - - - - - - - - - \n"); p=p+1; *p=20; // p[0]=20; prind("%d %d %d \n", p[- 1], p[0], p[1]); prind("- - - - - - - - - - - - - - \n"); p=p+1; *p=30; // p[0]=30; prind("%d %d %d \n", p[- 2], p[- 1], p[0]); prind("- - - - - - - - - - - - - - \n"); prind("%d %d %d \n", p[- 2], p[- 1], p[0]); prind("%d %d %d \n", *(p- 2), *(p- 1), *p);
4.1 1 (16/16)- - - [4-11.c ] array array 10?? P p[0] P[1] P[2] array+1 array+1 10 20? P P[- 1] P[0] P[1] array+2 array+2 10 20 30 P p[- 2] P[- 1] P[0] 7,8 12, 13 17, 18 *p == *(p+0) == p[0] *array == *(array+0) == array[0] *p == *(p+0) == p[0] *(array+1) == array[1] *p == *(p+0) == p[0] *(array+2) == array[2]
4.2 포인터와 2 차원배열
4.2 포인터와 2차원 배열 (1/17) 2차원 배열에서 array[i] == *(array+i)는 주소이다. ü 복습(PART2 2장) l 1차원 배열 : *(array+i) == array[i] == *&array[i]는 값 l 2차원 배열 : *(array+i) == array[i] == *&array[i]는 주소
4.2 2 (2/17)- - - [4-12.c ] #include <stdio.h> int main(void) { int array[3][3]={10,20,30,40,50,60,70,80,90}; prind("%x %x %x \n", &array[0][0], &array[0][1], &array[0][2]); // prind("%x %x %x \n", &array[1][0], &array[1][1], &array[1][2]); // prind("%x %x %x \n", &array[2][0], &array[2][1], &array[2][2]); // prind("- - - - - - - - - - - - - - - \n"); prind("%d %d %d \n", *&array[0][0], *&array[0][1], *&array[0][2]); // prind("%d %d %d \n", *&array[1][0], *&array[1][1], *&array[1][2]); // prind("%d %d %d \n", *&array[2][0], *&array[2][1], *&array[2][2]); // prind("- - - - - - - - - - - - - - - \n"); prind("%d %d %d \n", array[0][0], array[0][1], array[0][2]); // *& prind("%d %d %d \n", array[1][0], array[1][1], array[1][2]); // *& prind("%d %d %d \n", array[2][0], array[2][1], array[2][2]); // *& return 0; }
4.2 포인터와 2차원 배열 (3/17)- - - [4-12.c 분석]
4.2 2 (4/17)- - - [4-13.c ] int array[2][3] = {10,20,30,40,50,60}; prind("- - - - - - - - - - - - - - - - - - #1- - - - - - - - - - - - - - - - - - - - \n"); prind("%x %x %x \n", &array[0][0], &array[0][1], &array[0][2]); prind("%x %x %x \n", &array[1][0], &array[1][1], &array[1][2]); prind("- - - - - - - - - - - - - - - - - - #2- - - - - - - - - - - - - - - - - - - - \n"); prind("%x %x \n", array, array+1); prind("%x %x \n", array[0], array[1]); prind("%x %x \n", *(array+0), *(array+1)); PART2-2 ( ) array[i] == *(array+i) prind("- - - - - - - - - - - - - - - - - - - #3- - - - - - - - - - - - - - - - - - - - \n"); prind("%d %d %d \n", *(array[0]+0),*(array[0]+1),*(array[0]+2)); prind("%d %d %d \n", *(array[1]+0),*(array[1]+1),*(array[1]+2)); prind("- - - - - - - - - - - - - - - - - - - #4- - - - - - - - - - - - - - - - - - - - \n"); prind("%d %d %d \n", *(*(array+0)+0), *(*(array+0)+1), *(*(array+0)+2)); prind("%d %d %d \n", *(*(array+1)+0), *(*(array+1)+1), *(*(array+1)+2));
4.2 2 (5/17)- - - [4-13.c ] &array[0][1] == array[0]+1 int array[2][3]; &array[0][0] == array[0]+0 &array[0][2] == array[0]+2 &array[1][0] == array[1]+0 &array[1][1] == array[1]+1 &array[1][2] == array[1]+2 *&array[0][1] == *( array[0]+1 ) int array[2][3]; *&array[0][0] == *( array[0]+0 ) *&array[0][2] == *( array[0]+2 ) *&array[1][0] == *( array[1]+0 ) *&array[1][1] == *( array[1]+1 ) *&array[1][2] == *( array[1]+2 )
4.2 2 (6/17)- - - [4-13.c ] &array[0][1] == *(array+0)+1 int array[2][3]; &array[0][0] == *(array+0)+0 &array[0][2] == *(array+0)+2 &array[1][0] == *(array+1)+0 &array[1][1] == *(array+1)+1 &array[1][2] == *(array+1)+2 *&array[0][1] == *( *(array+0)+1 ) int array[2][3]; *&array[0][0] == *( *(array+0)+0 ) *&array[0][2] == *( *(array+0)+2 ) *&array[1][0] == *( *(array+1)+0 ) *&array[1][2] == *( *(array+1)+2 ) *&array[1][1] == *( *(array+1)+1 )
4.2 포인터와 2차원 배열 (7/17)- - - [4-13.c 분석] 2차원 배열의 물리적 메모리 구조
4.2 2 (8/17)- - - [4-14.c ] 2 ü 2 #include <stdio.h> int main(void) { int array[2][3]={10,20,30,40,50,60}; int* p=null; } p=array; // p=&array[0][0]; // p=array[0]; // prind("- - - - - - - - - - - - \n"); prind("%x %x %x \n", &p[0], &p[1], &p[2]); prind("%x %x %x \n", &p[3], &p[4], &p[5]); prind("- - - - - - - - - - - - \n"); prind("%d %d %d \n", p[0], p[1], p[2]); // prind("%d %d %d \n", *(p+0), *(p+1), *(p+2)); prind("%d %d %d \n", p[3], p[4], p[5]); // prind("%d %d %d \n", *(p+3), *(p+4), *(p+5)); return 0;
4.2 2 (9/17)- - - [4-14.c 1] int array[2][3]={10,20,30,40,50,60}; int* p=null; p=array; array P array == &array[0][0] == array[0] array+1== &array[1][0] == array[1]
4.2 2 (10/17)- - - [4-14.c 2] int array[2][3]={10,20,30,40,50,60}; int* p=null; p=array; 1 p array p p == &p[0] p+3 == &p[3] p+1 == &p[1] p+2 == &p[2] p+5 == &p[5] p+4 == &p[4]
4.2 2 (11/17)- - - [4-14.c 3] int array[2][3]={10,20,30,40,50,60}; int* p=null p=array; 1 p array P *(p+1) == *&p[1] == p[1] *p == *&p[0] == p[0] *(p+3) == *&p[3] == p[3] *(p+2) == *&p[2] == p[2] *(p+5) == *&p[5] == p[5] *(p+4) == *&p[4] == p[4]
4.2 2 (12/17)- - - [4-15.c ] #include <stdio.h> int main(void) { int array[2][3]={10,20,30,40,50,60}; int* p=null; // int** p; p=array; // 1 2 } prind("%d %d %d \n", p[0][0], p[0][1], p[0][2]); // prind("%d %d %d \n", p[1][0], p[1][1], p[1][2]); // return 0; 1 p 2 array[2][3] 1. p[0], p[1], p[2], p[3], p[4], p[5], p[6]
4.2 2 (13/17)- - - [4-15.c ] #include <stdio.h> int main(void) { int array[2][3]={10,20,30,40,50,60}; int** p=null; p=array; // 2 2 } prind("%d %d %d \n", p[0][0], p[0][1], p[0][2]); // prind("%d %d %d \n", p[1][0], p[1][1], p[1][2]); // return 0; 2 p 1.
4.2 2 (14/17) ü ( ) l : l : * l :
4.2 2 (15/17) 2 ü int array1[2][3]; int (*p1)[3]=null; // p1 double array2[2][4]; double (*p2)[4]=null; // p2 p1=array1; // p1 3 2 array1 p2=array2; // p2 4 2 array2 return 0;
4.2 2 (16/17)- - - [4-16.c ] #include <stdio.h> int main(void) { int array[2][3]={10,20,30,40,50,60}; int (*p)[3]=null; // p p=array; // } prind("%d %d %d \n", p[0][0], p[0][1], p[0][2]); prind("%d %d %d \n", p[1][0], p[1][1], p[1][2]); return 0;
ü 4-17.c ü 4-18.c 4.2 2 (17/17)
4.3 포인터배열
4.3 (1/8) ü l :, * l : l :
4.3 (2/8) int a=1, b=2, c=3; int* pointer[3]={null, NULL, NULL}; // pointer[0]=&a; pointer[1]=&b; pointer[2]=&c; return 0; ü
#include <stdio.h> int main(void) { int a=10, b=20, c=30; int* ap=null; int* bp=null; int* cp=null; 4.3 (3/8)- - - [4-19.c ] ap=&a; bp=&b; cp=&c;. prind("%d %d %d \n", a, b, c); prind("%d %d %d \n", *ap, *bp, *cp); } prind("%x %x %x \n", &a, &b, &c); prind("%x %x %x \n", ap, bp, cp); prind("%x %x %x \n", &ap, &bp, &cp); return 0;
4.3 (4/8)- - - [4-20.c ] #include <stdio.h> int main(void) { int a=10, b=20, c=30; int* ap[3]={null, NULL, NULL}; // ap[0]=&a; ap[1]=&b; ap[2]=&c;. } prind("%x %x %x \n", &a, &b, &c); prind("%x %x %x \n", ap[0], ap[1], ap[2]); prind("%x %x %x \n", *(ap+0), *(ap+1), *(ap+2)); prind("- - - - - - - - - - - - - - \n"); prind("%d %d %d \n", *&a, *&b, *&c); prind("%d %d %d \n", *ap[0], *ap[1], *ap[2] ); prind("%d %d %d \n", **(ap+0), **(ap+1), **(ap+2) ); return 0; ap[i] == *(ap+i)
4.3 (5/8)- - - [4-20.c ] int a=10, b=20, c=30; int* ap[3]={null, NULL, NULL}; ap[0]=&a; ap[1]=&b; ap[2]=&c;
4.3 (6/8)- - - [4-20.c ] &ap[0] &ap[1] &ap[2] &c &a &b &c 30 ap[0] ap[1] ap[2] c int a=10, b=20, c=30; int* ap[3]={null, NULL, NULL}; ap[0]=&a; ap[1]=&b; ap[2]=&c; &b 20 b &a 10 a
4.3 (7/8) ü 3 2 int (*p)[3]=null; ü, int* p[3]={null, NULL, NULL};
4.3 (8/8)- - - [4-21.c ] int a=10, b=20, c=30; int* ap[3]; // int array[2][3]={10,20,30,40,50,60}; int (*p)[3]; // ap[0]=&a; ap[1]=&b; ap[2]=&c; p=array;
4.4 포인터와문자그리고포인터와문자열
4.4 (1/21) ü l ( ) l, l ü l l ü l
4.4 (2/21)- - - [4-22.c ] char array[ ]={'A', 'B', 'C', 'D'}; // // prind(" : %c %c %c %c \n", 'A', 'B', 'C', 'D'); // prind(" : %c %c %c %c \n", array[0], array[1], array[2], array[3]); array[0]='d'; array[1]='c'; array[2]='b'; array[3]='a ; prind(" : %c %c %c %c \n", array[0], array[1], array[2], array[3]); prind(" array : %d \n", sizeof(array) ); // 4
4.4 (3/21)- - - [4-23.c ] #include <stdio.h> int main(void) { char array1[ ]={'A', 'B', 'C', 'D'}; char* p=null; p=array1; prind("%c %c %c %c \n", p[0], p[1], p[2], p[3]); prind("%d %d %d %d \n", p[0], p[1], p[2], p[3]); prind("%c %c %c %c \n", *(p+0), *(p+1), *(p+2), *(p+3) ); prind("%d %d %d %d \n", *(p+0), *(p+1), *(p+2), *(p+3) ); } return 0;
4.4 (4/21) (Null) ü l ( ) l (Null), (\0) l l l %s #include <stdio.h> int main(void) { prind( ABCD"); // return 0; }
4.4 (5/21) (Null) (NULL) ü (Null) \0 ASCII 0(10 ) ü (NULL) 0 int* p=null;
4.4 (6/21)- - - [4-24.c ] #include <stdio.h> int main(void) { char array[ ]="ABCD"; // } // prind("%c %c %c %c %c \n", array[0], array[1], array[2], array[3], array[4]); prind("%d %d %d %d %d \n", array[0], array[1], array[2], array[3], array[4]); // prind("%d \n", sizeof(array)); return 0;
4.4 (7/21)- - - [4-25.c ] #include <stdio.h> int main(void) { char array[ ]={'A', 'B', 'C', 'D', '\0 }; // } // prind("%c %c %c %c %c \n", array[0], array[1], array[2], array[3], array[4]); prind("%d %d %d %d %d \n", array[0], array[1], array[2], array[3], array[4]); return 0;
4.4 (8/21)- - - [4-26.c ] #include <stdio.h> int main(void) { char array[ ]="ABCD"; // \0 // prind("%s\n", array); prind("%s\n", array+1); prind("%s\n", array+2); prind("%s\n", array+3); } return 0;
4.4 (9/21)- - - [4-27.c ] #include <stdio.h> int main(void) { char array1[ ]={'A', 'B', 'C', 'D', '\0'}; // char array2[ ]={'A', 'B', 'C', 'D'}; // // prind("%s\n", array1); prind("%s\n", array2); } return 0;
4.4 (10/21)- - - [4-28.c ] #include <stdio.h> int main(void) { char array[ ]="ABCD"; // } array[0]='x'; prind("%s \n", array); return 0;
4.4 (11/21) ü.. ü.. %s. %s (\0)
4.4 (12/21)- - - [4-29.c ] #include <stdio.h> int main(void) { char* p="abcd"; prind("%s\n", p); prind("%s\n", p+1); prind("%s\n", p+2); prind("%s\n", p+3); // ABCD p } return 0;
4.4 (13/21)- - - [4-30.c ] #include <stdio.h> int main(void) { char array[ ]="ABCD"; char* p="abcd"; // p p[0]='x'; // array[0]='x'; // p=array; // array=array+1; // prind("%s \n", p); prind("%s \n", array); } return 0;
4.4 포인터와 문자 그리고 포인터와 문자열 (14/21)- - - [4-31.c 실습] #include <stdio.h> int main(void) { char* p= &"ABCD"; // char* p="abcd"; prind("%x \n", p); prind("%x \n", p+1); prind("%x \n", p+2); prind("%x \n", p+3); prind("%x \n", p+4); prind("- - - - - - - - - \n"); prind("%x %x \n", &"ABCD", p); return 0; }
4.4 (15/21)- - - [4-32.c ] char* p="good morning"; char* q="c- language"; char* array[2]={"good morning", "C- language"}; // prind("%s \n", p); prind("%s \n", q); prind("- - - - - - - - - - - \n"); prind("%s \n", array[0]); prind("%s \n", array[1]); prind("- - - - - - - - - - - \n"); prind("%s \n", p+5); prind("%s \n", q+2); prind("- - - - - - - - - - - \n"); prind("%s \n", array[0]+5); prind("%s \n", array[1]+2);
4.4 포인터와 문자 그리고 포인터와 문자열 (16/21)- - - [4-32.c 분석] char* p="good morning"; char* q="c- language ;
4.4 포인터와 문자 그리고 포인터와 문자열 (17/21)- - - [4-32.c 분석] char* array[2]={"good morning", "C- language"}; // 포인터 배열 선언 == char* array[2]={&"good morning", &"C- language"}; // 같은 표현
4.4 (18/21) ü const 1. 3. 5 1 과 2.
4.4 (19/21)- - - [4-33.c ] 1. #include <stdio.h> int main(void) { char a='a'; char b='b'; char* const p=&a; // p=&a *p='c'; // prind("%c \n", *p); prind("%c \n", a); } p=&b; // return 0;
4.4 (20/21)- - - [4-34.c ] 2. #include <stdio.h> int main(void) { char a='a'; char b='b'; const char* p=&a; // *p prind("%c \n", *p); prind("%c \n", a); p=&b; // prind("%c \n", *p); prind("%c \n", b); } a= X ; b='c'; *p='d'; return 0; //
4.4 (21/21)- - - [4-35.c ] 3. char a='a'; char b='b'; const char* const p=&a; prind("%c \n", *p); prind("%c \n", a); a='x'; b='c'; // // prind("%c \n", a); prind("%c \n", b); p=&b; // *p='d'; //
1 2