- Part2-3
3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터
3.1 포인터란
ü ü ü. ü. ü. ü ( )
? 3.1 ü. ü C ( ).? ü ü PART2-4 ü ( ) PART3-4
3.2 포인터변수의선언과사용
3.2 포인터 변수의 선언과 사용 (1/8) 포인터 변수의 선언 ü 자료형: 포인터 변수의 자료형 지정, 자료형 다음에 * 연산자를 붙임 ü 포인터 변수 이름: 주소를 저장할 변수의 이름 지정 ü NULL 포인터 설정: 포인터 변수 선언 시 NULL로 초기화 int* p1=null; // int형 주소를 저장하는 포인터 변수 char* p2=null; // char형 주소를 저장하는 포인터 변수 double* p3=null; // double형 주소를 저장하는 포인터 변수
3.2 (2/8)- - - [3-2.c ] #include <stdio.h> int main(void) { // char* cp=null; int* ip=null; pring("%x %x %x\n", &cp, cp, *&cp); pring("%x %x %x\n", &ip, ip, *&ip); &ip &cp 0 0 ip==*&ip cp==*&cp } pring("%d %d \n", sizeof(char*), sizeof(int*)); // 4, 4 pring("%d %d \n", sizeof(cp), sizeof(ip)); // 4, 4 return 0; 4.
3.2 (3/8)- - - [3-3.c ] #include <stdio.h> int main( ) { char c='a'; char* cp=null; cp=&c; // &cp &c &c A cp==*&cp c==*&c } pring("%x %c %c \n", &c, c, *&c); pring("%x %x %x \n", &cp, cp, *&cp); pring("%c \n", c); // pring("%c \n", *cp); // return 0; c == *&c == *cp
3.2 (4/8)- - - [3-4.c ] #include <stdio.h> int main( ) { int a=0, b=0, c=0; int* ip=null; // &ip &b &a &c ip ip=&a; // *ip=10; pring("%d %d %d %d\n", a, b, c, *ip); &c 30 0 c ip=&b; // *ip=20; pring("%d %d %d %d\n", a, b, c, *ip); &b 20 0 b } ip=&c; // *ip=30; pring("%d %d %d %d\n", a, b, c, *ip); return 0; &a 10 0 a
3.2 (5/8)- - - [3-5.c ] #include <stdio.h> int main( ) { int num=10; int* ip=null; // ip=# // &ip &num &num 10 ip num==*ip } pring("%x %x %d \n", &*&ip, *&ip, **&ip); pring("%x %x %d \n", &ip, ip, *ip); return 0; *&
3.2 (6/8)- - - [3-6.c ] #include <stdio.h> int main( ) { int num1=10; int num2=0; int* ip=null; // &ip &num2 ip num2 } ip=&num1; // num2=*ip+num1; pring("%d %d %d\n", *ip, num1, num2); return 0; &num1 num1
#include <stdio.h> int main(void) { int* ip=null; *ip=10000; return 0; } 3.2 (7/8) #include <stdio.h> int main(void) { int* ip=14592343; *ip=1020; return 0; }
3.2 (8/8) 2 #include <stdio.h> int main(void) { int num=10; int* ip=null; ip=# return 0; } == #include <stdio.h> int main(void) { int num=10; int* ip=# return 0; }
3.3 다차원포인터변수의선언과사용
3.3 다차원 포인터 변수의 선언과 사용 (1/11) 다차원 포인터 변수란? ü 2차원 이상의 포인터 변수를 의미한다.
3.3 (2/11) 1 : #include <stdio.h> int main(void) { int num=10; int* p1=null; p1=# return 0; } &p1 &num &num 10 p1 num==*p1
3.3 (3/11) 2 : 1 #include <stdio.h> int main(void) { int num=10; int* p1=null; int** p2=null; &p2 &p1 &p1 &num p2 p1 } p1=# p2=&p1; return 0; &num 10 num
3.3 (4/11) 3 : 2 #include <stdio.h> int main(void) { int num=10; int* p1=null; int** p2=null; int*** p3=null; } p1=# p2=&p1; p3=&p2; return 0; &p3 &p2 &p1 &num &p2 &p1 &num 10 p3 p2 p1 num
3.3 (5/11)- - - [3-7.c ] #include <stdio.h> int main( ) { char c1='a'; char* cp=null; char** cpp=null; &cpp &cp cpp cp=&c1; cpp=&cp; &cp &c1 cp } pring("%c %x %x \n", c1, cp, cpp); pring("%x %x %x \n", &c1, &cp, &cpp); pring("%c %c %c \n", c1, *cp,**cpp); return 0; &c1 A c1
3.3 (6/11)- - - [3-8.c ] #include <stdio.h> int main( ) { int num1=10; int* ip=null; int** ipp=null; } ip=&num1; ipp=&ip; pring("%d %x %x \n", num1, ip, ipp); pring("%x %x %x \n", &num1, &ip, &ipp); pring("%d %x %x \n", *&num1, *&ip, *&ipp); pring("%d %d %d \n", num1, *ip, **ipp); pring("%x %x %x \n", &num1, ip, *ipp); return 0;
3.3 다차원 포인터 변수의 선언과 사용 (7/11)- - - [3-8.c 분석]
3.3 (8/11)- - - [3-9.c ] int num1=10; int* ip1=null; int** ip2=null; int*** ip3=null; ip1=&num1; ip2=&ip1; ip3=&ip2; pring("%d %d %d %d \n", num1, *ip1, **ip2, ***ip3); pring("%x %x %x %x \n", &num1, ip1, *ip2, **ip3); pring("%x %x %x \n", &ip1, ip2, *ip3); pring("%x %x \n", &ip2, ip3); pring("%d %d \n", sizeof(int), sizeof(int*)); pring("%d %d\n", sizeof(int**), sizeof(int***)); pring("%d %d \n", sizeof(num1), sizeof(ip1)); pring("%d %d\n", sizeof(ip2), sizeof(ip3));
3.3 (9/11)- - - [3-9.c ] ip3==&ip2 *ip3==ip2==&ip1 **ip3==*ip2==ip1==&num1 ***ip3==**ip2==*ip1==num1==10
3.3 (10/11)- - - [3-10.c ] int num1=10; int* ip1=null; int** ip2=null; int*** ip3=null; ip1=&num1; ip2=&ip1; ip3=&ip2; pring("%d %d %d %d \n", num1, *ip1, **ip2, ***ip3); *ip1=20; pring("%d %d %d %d \n", num1, *ip1, **ip2, ***ip3); **ip2=30; pring("%d %d %d %d \n", num1, *ip1, **ip2, ***ip3); ***ip3=40; pring("%d %d %d %d \n", num1, *ip1, **ip2, ***ip3);
3.3 다차원 포인터 변수의 선언과 사용 (11/11)- - - [3-10.c 분석]
3.4 주소의가감산
3.4 (1/8)- - - [3-11.c ] #include <stdio.h> int main( ) { char c='a'; char* cp=null; char** cpp=null; } cp=&c; cpp=&cp; pring("%x %x %x \n", &c, &cp, &cpp); pring("%x %x %x \n", &c+1, &cp+1, &cpp+1); pring("%c %x %x \n", c, cp, cpp); pring("%c %x %x \n", c+1, cp+1, cpp+1); return 0;
3.4 주소의 가감산 (2/8)- - - [3-11.c 분석] pring("%x %x %x \n", &c, &cp, &cpp); pring("%x %x %x \n", &c+1, &cp+1, &cpp+1);
3.4 주소의 가감산 (3/8)- - - [3-11.c 분석] pring("%c %x %x \n", c, cp, cpp); pring("%c %x %x \n", c+1, cp+1, cpp+1);
3.4 (4/8)- - - [3-12.c ] #include <stdio.h> int main( ) { int num=10; int* ip=null; int** ipp=null; } ip=# ipp=&ip; pring("%x %x %x \n", &num, &ip, &ipp); pring("%x %x %x \n", &num+1, &ip+1, &ipp+1); pring("%d %x %x \n", num, ip, ipp); pring("%d %x %x \n", num+1, ip+1, ipp+1); return 0;
3.4 주소의 가감산 (5/8)- - - [3-12.c 분석]
3.4 주소의 가감산 (6/8)- - - [3-12.c 분석]
3.4 (7/8)- - - [3-13.c ] #include <stdio.h> int main( ) { int array[3]={10,20,30}; int* ip=null; int** ipp=null; ip=array; ipp=&ip; pring("%d %d %d \n", array[0], array[1], array[2]); pring("%d %d %d \n", *(ip+0), *(ip+1), *(ip+2)); pring("%d %d %d \n", *(*ipp+0), *(*ipp+1), *(*ipp+2)); } return 0;
3.4 주소의 가감산 (8/8)- - - [3-13.c 분석]
3.5 함수포인터
3.5 (1/5)- - - [3-14.c ] #include <stdio.h> int main(void) { pring( %x %x %x \n, main, priny, scanf); return 0; }
3.5 (2/5) : ü : ü : * ü :
3.5 (2/5)- - - [3-15.c ] #include <stdio.h> void add(double num1, double num2); int main( ) { double x=3.1, y=5.1; void (*pointer) (double, double); // } pring("add : %x\n", add); pring(" : %x \n", &pointer); pointer=add; pointer(x, y); // return 0; 12ff40 add add add() pointer void add(double num1, double num2) { double result; result=num1+num2; pring("%lf + %lf = %lf.\n", num1, num2, result); }
3.5 (3/5)- - - [3-15.c ] void add (double num1, double num2) void (*pointer) (double, double ) pointer = add; pointer(3.1, 5.1);
3.5 (4/5)- - - [3-16.c ] [3-16.c ] int x, z; char c; void (*pointer) (int, int); scanf( %d %c %d, &x, &c, &z); if(c=='+') pointer=add; else if(c=='- ') pointer=subtract; pointer(x,z);
3.5 (5/5)- - - [3-16.c ] if(c=='+') pointer=add; c == + else if(c=='- ') pointer=subtract; c == - &pointer add pointer &pointer subtract pointer subtract subtract( ) subtract( ) add add( ) add( ) 17 ~18 20 ~21
3.5 (5/5)- - - [3-16.c ] ü. ü,,