More Related Content More from ์
์ ์ (20) 9. pointer2. 2
Pointer Declaration and Assignment
ยง Variables and address
โ ๋ฉ๋ชจ๋ฆฌ์ ๊ตฌ์กฐ
โ ๊ฐ ๋ณ์๋ ๋ฉ๋ชจ๋ฆฌ์ ํน์ ์ฃผ์์ ์์น ํ๋ค
โข ๋ณ์์ ์ฃผ์: Pointer
โฆ
1000 โaโ
1001
3.2
1005
4
โฆ
ch, 1byte
f, 4bytes
i, 4bytes
char ch = โaโ ;
float f = 3.2 ;
int i = 4 ;
address
3. 3
Pointer Declaration and Assignment
ยง Variables and address
โ ๋ณ์๋ถํฐ ๋ณ์์ ์ฃผ์(Pointer) ์ป์ด๋ด๊ธฐ
char ch = โaโ ;
float f = 3.2 ;
int i = 4 ;
printf( โ%d %d %dnโ, &a, &f, &i ) ;
&(๋ณ์์ด๋ฆ) == ๋ณ์์ ์ฃผ์ โฆ
1000 โaโ
1001
3.2
1005
4
โฆ
Address
operator
4. 4
Pointer Declaration and Assignment
ยง Variables and address
โ ๋ณ์์ ์ฃผ์(Pointer)๋ฅผ ์ด์ฉํ์ฌ ๋ณ์ ์ ๊ทผํ๊ธฐ
char ch ;
float f ;
int i ;
*(&ch) = โaโ ;
*(&f) = 3.2 ;
*(&i) = 4 ;
*(์ฃผ์)๋ (์ฃผ์)์ ์์นํ ๋ณ์๋ฅผ ๋ปํจ
โฆ
1000 โaโ
1001
3.2
1005
4
โฆ
char ch ;
float f ;
int i ;
ch = โaโ ;
f = 3.2 ;
i = 4 ;
Indirect
operator
5. 5
Pointer Declaration and Assignment
ยง Pointer Variable
โ โ๋ณ์์ ์ฃผ์(Pointer)โ๋ฅผ ๊ฐ์ ์ ์ฅํ ์ ์๋ ๋ณ์
char ch = โaโ ;
float f = 3.2 ;
int i = 4 ;
char *pch ;
float *pf ;
int *pi ;
pch = &ch ;
pf = &f ;
pi = &i ;
printf( โ%d %d %dnโ, pch, pf, pi ) ;
data_type * pointer_varaible;
char ๋ณ์์ ์ฃผ์๋ง์
์ ์ฅํ ์ ์๋ ๋ณ์
float ๋ณ์์ ์ฃผ์๋ง์
์ ์ฅํ ์ ์๋ ๋ณ์
int ๋ณ์์ ์ฃผ์๋ง์
์ ์ฅํ ์ ์๋ ๋ณ์
char *pch = &ch ;
float *pf = &f ;
int *pi = &i ;
6. 6
Pointer Declaration and Assignment
ยง Pointer Variable
char ch ;
float f ;
int i ;
ch = โaโ ;
f = 3.2 ;
i = 4 ;
char ch ;
float f ;
int i ;
char *pch = &ch ;
float *pf = &f ;
int *pi = &i ;
*pch = โaโ ;
*pf = 3.2 ;
*pi = 4 ;
โฆ
1000 โaโ
1001
3.2
1005
4
โฆ
7. 7
Pointer Declaration and Assignment
ยง Pointer Variable
โ ๋ชจ๋ pointer ๋ณ์๋ 4 bytes ํฌ๊ธฐ์ด๋ค (4 bytes machine)
โข why??
char *pch ;
float *pf ;
int *pi ;
printf( โ%dnโ, sizeof(pch) ) ;
printf( โ%dnโ, sizeof(pf) ) ;
printf( โ%dnโ, sizeof(pi) ) ;
int i = 0 ;
int *pi = & i;
printf( โ%dnโ, i ) ;
printf( โ%dnโ, *pi ) ;
printf( โ%dnโ, &pi ) ;
8. 8
Pointer Declaration and Assignment
ยง Pointer Variable
โ ๋ชจ๋ pointer ๋ณ์๋ ๋ณ์์ด๋ฏ๋ก ์ฃผ์๋ฅผ ๊ฐ๋๋ค.
int i = 0 ;
int *pi = &i;
printf( โ%dnโ, i ) ;
printf( โ%dnโ, *pi ) ;
printf( โ%dnโ, &pi ) ;
1000
โฆ
1020
โฆ
pi, 4 bytes
i, 4 bytes
9. 9
Pointer Declaration and Assignment
[Ex] int *p;
int month=3;
p = &month;
pointer variable p์
month์ memory address๋ฅผ assign
p month
3
p
1000
month
31000
์ฃผ์๋ฅผ ์ง์ ์ ๋ ๊ฒ๋ณด๋ค๋
ํ์ดํ๋ฅผ ์ด์ฉํ์ฌ ํ์ํ๋ค.
ยง Example
10. 10
Addressing and Dereferencing
[Ex] int a, b;
int *p;
a = 7;
b = 7;
p = &a;
printf(โ*p = %dnโ, *p);
*p = 3;
printf(โa = %dnโ, a);
p๋ a๋ฅผ pointingํ๋ฏ๋ก, *p == 7
p๋ a์ address๋ฅผ ์ ์ฅํ๊ณ
์์ผ๋ฏ๋ก, *p๋ a๋ฅผ ์๋ฏธํ๊ณ ,
๊ฒฐ๊ตญ a์ ๋ด์ฉ์ 3์ผ๋ก ๋ณ๊ฒฝ
p์ a์ memory address๋ฅผ assign
*p = 7
a = 3
ยง Example
12. 12
Addressing and Dereferencing
[Ex1] int x, *p;
x = 10;
*p = x;
[Ex3] int x, *p;
x = 10;
p = x;
Error!!
p์ ๊ฐ์ด ์ฃผ์ด์ง์ง ์์ p๊ฐ ์ด๋ ๊ณณ์
referํ๊ณ ์๋์ง๋ฅผ ๋ชจ๋ฅด๋ ์ํฉ์์
p๊ฐ pointํ๋ ๊ณณ์ x๊ฐ ์
๋ ฅ ๋ถ๊ฐ
Error!!
p๋ address๋ฅผ ๊ฐ์ผ๋ก ํ๋ point
variable์ด๋ฏ๋ก int์ assign์ ๋ถ๊ฐ
ยง ํ๊ธฐ ์ฌ์ด ์๋ฌ
13. 13
const ์ Pointer ๋ณ์
ยง const ์ Pointer ๋ณ์
โ p๋ const int ํ ๋ณ์์ ์ฃผ์๋ฅผ ์ ์ฅํ ์ ์๋ ํฌ์ธํฐ ๋ณ์
โ a๋ ์์๋ณ์๋ก ๊ฐ์ ๋ฐ๊ฟ ์ ์์.
โ p๊ฐ ๊ฐ๋ฅดํค๋ ๋ณ์๋ ์์๋ณ์์ด๋ฏ๋ก p๋ฅผ ํตํ ๋ณ๊ฒฝ๋ถ๊ฐ
const int a = 7;
const int *p = &a; // ๊ฐ๋ฅ
a = 8 ; //๋ถ๊ฐ๋ฅ
*p = 9 ; //๋ถ๊ฐ๋ฅ
14. 14
const ์ Pointer ๋ณ์
ยง const ์ Pointer ๋ณ์
โ p๋ const int ํ ๋ณ์์ ์ฃผ์๋ฅผ ์ ์ฅํ ์ ์๋ ํฌ์ธํฐ ๋ณ์์ด
์ง๋ง, ์ผ๋ฐ int ํ ๋ณ์์ ์ฃผ์๋ฅผ ์ ์ฅํ ์ ์์.
โ a๋ ์ผ๋ฐ ๋ณ์๋ก ๊ฐ์ ๋ฐ๊ฟ ์ ์์.
โ p๊ฐ ๊ฐ๋ฅดํค๋ ๋ณ์๊ฐ ์ผ๋ฐ๋ณ์์ด๊ธฐ๋ ํ๋, p๊ฐ const int์ ํฌ
์ธํฐ๋ก ์ ์ธ๋์์ผ๋ฏ๋ก, p๋ฅผ ํตํ ๋ณ๊ฒฝ๋ถ๊ฐ
int a = 7;
const int *p = &a; // ๊ฐ๋ฅ
a = 8 ; //๊ฐ๋ฅ
*p = 9 ; //๋ถ๊ฐ๋ฅ
15. 15
const ์ Pointer ๋ณ์
ยง const ์ Pointer ๋ณ์
โ p๋ ์ผ๋ฐ int ํ ๋ณ์์ ์ฃผ์๋ฅผ ์ ์ฅํ ์ ์๋ ํฌ์ธํฐ ๋ณ์์ด๋ฏ
๋ก, ์์๋ณ์ a์ ์ฃผ์๋ฅผ ์ ์ฅํ ์ ์์.
โ ๋ง์ฝ ์ด๊ฒ์ด ๋๋ค๋ฉด *p=8 ์ด ๊ฐ๋ฅํ๊ณ ๊ฒฐ๊ตญ a์ ๊ฐ์ ๋ฐ๊ฟ ์
์๊ฒ ๋จ.
const int a = 7;
int *p = &a; // ๋ถ๊ฐ๋ฅ
16. 16
const ์ Pointer ๋ณ์
ยง const ์ Pointer ๋ณ์
โ p๋ const int ํ ๋ณ์์ ์ฃผ์๋ฅผ ์ ์ฅํ ์ ์๋ ํฌ์ธํฐ ๋ณ์์ด
๋ฏ๋ก ๋ชจ๋ ๊ฐ๋ฅ
โ p๋ const int ํ ๋ณ์์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ์์ ๋ณ์์ด๋ฏ๋ก, ์ฒซ
์ด๊ธฐํ๋ ๊ฐ๋ฅํ์ง๋ง, ๊ทธ ์ดํ ์นํ์ ๋ถ๊ฐ๋ฅ
const int a = 7, b = 8 ;
const int * p = &a; // ๊ฐ๋ฅ
p = &b; //๊ฐ๋ฅ
const int a = 7, b = 8 ;
const int * const p = &a; // ๊ฐ๋ฅ
p = &b; // ๋ถ๊ฐ๋ฅ
17. 17
๋ค์ค Pointer ๋ณ์
ยง ๋ค์ค Pointer ๋ณ์
โ i๋ intํ ๋ณ์
โ p๋ intํ ๋ณ์์ ์ฃผ์๋ฅผ ์ ์ฅํ ์ ์๋ ํฌ์ธํฐ ๋ณ์
โ q๋ intํ ๋ณ์์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ํฌ์ธํฐ ๋ณ์์ ์ฃผ์๋ฅผ ์ ์ฅ
ํ ์ ์๋ ํฌ์ธํฐ ๋ณ์
โข q๋ ํฌ์ธํฐ๋ณ์์ด๊ธฐ ๋๋ฌธ์ ํฌ๊ธฐ๋ 4๋ฐ์ดํธ์ด๋ค(4 bytes machine)
int i = 4 ;
int *p ;
int **q ;
19. ยง Example:
โ ๊ฐ ๋จ๊ณ์ ๋ฉ๋ชจ๋ฆฌ ์ํ๋ฅผ ๊ทธ๋ฆผ์ผ
๋ก ๊ทธ๋ฆฌ์์ค.
โ ์ต์ข
์ ์ผ๋ก, i, j ๋ณ์์ ๊ฐ์ ์ผ๋ง
์ธ๊ฐ?
โ i, j, p, q์ ์ฃผ์๋ฅผ ๊ฐ๊ฐ 1000,
1004, 2000, 3000 ์ด๋ผ๋ฉด, p, q, r
์ ๊ฐ์ ๊ฐ๊ฐ ์ผ๋ง์ธ๊ฐ?
19
Pointer Declaration and Assignment
[Ex] int i = 3, j = 2;
int *p, *q ;
int **r ;
p = &i ;
q = &j ;
r = &p ;
*p = 4 ;
*q = 5 ;
**r = 6 ;
*r = &q ;
q =&i ;
**r = 7 ;