μƒˆμ†Œμ‹

Languages/C

포인터 λ³€μˆ˜μ—μ„œ const ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” μ—¬λŸ¬κ°€μ§€ 방법

  • -
λ°˜μ‘ν˜•

λͺ¨λ“  μ‹€μŠ΅ μ½”λ“œλŠ” κΉ€μ„±μ—½ λŒ€ν‘œλ‹˜μ˜ 

"Do it ! Cμ–Έμ–΄ μž…λ¬Έ" μ±…μ˜ λ‚΄μš©μ„ λ°”νƒ•μœΌλ‘œ μ‹€μŠ΅ν•˜κ³  λ‚΄μš©μ„ μš”μ•½ν•œ κ²ƒμž…λ‹ˆλ‹€.

 

β€» μƒμ—…μš©λ„κ°€ μ•„λ‹ˆλ©°, tipsλ₯Ό 톡해 배운 λ‚΄μš©μ„ λ³΅μŠ΅ν•˜κ³ μž 슀슀둜 κ³΅λΆ€ν•˜λŠ” λͺ©μ μœΌλ‘œ μ˜¬λ¦¬λŠ” κ²ƒμ΄λ‹ˆ

λΆˆλ²•μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 것을 κΈˆμ§€ν•©λ‹ˆλ‹€.

 


포인터 λ³€μˆ˜λŠ” 일반 λ³€μˆ˜μ™€ const ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” μœ„μΉ˜κ°€ μ’€ λ‹€λ₯΄λ‹€.

 

μ™œλƒν•˜λ©΄ 포인터 λ³€μˆ˜λŠ” 포인터 λ³€μˆ˜μ— μ €μž₯된 값을 λ³€κ²½ν•˜κ±°λ‚˜ 포인터 λ³€μˆ˜κ°€

κ°€λ₯΄ν‚€λŠ” λŒ€μƒμ˜ κ°’ 을 λ³€κ²½ν•˜λŠ” 두 가지  ν˜•νƒœλ‘œ μ‚¬μš©ν•  수 있기 λ•Œλ¬Έμ—

 

λ‹€μŒκ³Ό 같이 const ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλŠ” μœ„μΉ˜λ„ 두 곳이닀.

 

 

μ΄λ ‡κ²Œ const ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλŠ” μœ„μΉ˜κ°€ 두 곳이기 λ•Œλ¬Έμ—,

이 μœ„μΉ˜λ₯Ό μ‘°ν•©ν•˜λ©΄ 포인터 λ³€μˆ˜λ₯Ό μ„Έ 가지 λ°©λ²•μœΌλ‘œ  μ„ μ–Έν•  수 μžˆλ‹€.

 

 

1.  int * const p;

 

pμ•žμ— const ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œ 경우

pκ°€ 가지고 μžˆλŠ” μ£Όμ†Œλ₯Ό λ³€κ²½ν•˜λ©΄ λ²ˆμ—­ν•  λ•Œ 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

 

#include<stdio.h>


void main() {
	int data = 5, temp = 0;
	int* const p = &data;
	*p = 3; //data = 3 κ³Ό κ°™μŒ, 즉 pλ³€μˆ˜κ°€ μ €μž₯ν•˜κ³  μžˆλŠ” μ£Όμ†Œμ— κ°€μ„œ 3을 λŒ€μž….
	p = &temp; //였λ₯˜ λ°œμƒ: λ³€μˆ˜ p에 const속성이 μ μš©λ˜μ–΄ p에 μ €μž₯된 μ£Όμ†ŒλŠ” λ³€κ²½ λΆˆκ°€λŠ₯

}

 

 

 

2.  const int *p;

 

 

pκ°€ μ£Όμ†Œμ— μ ‘κ·Όν•  λ•Œ μ‚¬μš©ν•˜λŠ” 크기(μžλ£Œν˜•) μ•žμ— const ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ *pλ₯Ό μ‚¬μš©ν•˜μ—¬

λŒ€μƒμ˜ 값을 λ³€κ²½ν•˜λ©΄ λ²ˆμ—­ν•  λ•Œ 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

#include<stdio.h>


void main() {
	int data = 5, temp = 0;
	const int *p = &data; //λ³€μˆ˜ pλŠ” dataλ³€μˆ˜μ˜ μ£Όμ†Œλ₯Ό μ €μž₯ν•œλ‹€.
	*p = 3; //였λ₯˜ λ°œμƒ : λ³€μˆ˜ pκ°€ κ°€λ₯΄ν‚€λŠ” λŒ€μƒμ— const속성이 μ μš©λ˜μ–΄ λŒ€μƒμ˜ κ°’ 변경이 λΆˆκ°€λŠ₯ ν•˜λ‹€. dataκ°’ λ³€κ²½ λΆˆκ°€.

}

 

 

 

 

3.  const int * const p;

 

 

μžμ‹ κ³Ό λŒ€μƒμ— λͺ¨λ‘ constν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν–ˆκΈ° λ•Œλ¬Έμ— pκ°€ 가지고 μžˆλŠ” μ£Όμ†Œλ₯Ό λ°”κΎΈκ±°λ‚˜,

 

*pλ₯Ό μ‚¬μš©ν•˜μ—¬ λŒ€μƒμ˜ 값을  λ°”κΎΈλ©΄ λ²ˆμ—­ν•  λ•Œ 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

 

#include<stdio.h>


void main() {
	int data = 5, temp = 0;
	const int *const p = &data; //λ³€μˆ˜ pλŠ” dataλ³€μˆ˜μ˜ μ£Όμ†Œλ₯Ό μ €μž₯ν•œλ‹€.
	*p = 3; //였λ₯˜ λ°œμƒ : λ³€μˆ˜ pκ°€ κ°€λ₯΄ν‚€λŠ” λŒ€μƒμ— const속성이 μ μš©λ˜μ–΄ λŒ€μƒμ˜ κ°’ 변경이 λΆˆκ°€λŠ₯ ν•˜λ‹€. dataκ°’ λ³€κ²½ λΆˆκ°€.
	p = &temp; //였λ₯˜ λ°œμƒ : λ³€μˆ˜ p에 const속성이 μ μš©λ˜μ–΄ p 에 μ €μž₯된 μ£Όμ†ŒλŠ” λ³€κ²½ν•  수 μ—†μŒ.
}

 

 

결둠적으둜 일반 λ³€μˆ˜λ₯Ό λ‹€λ£° λ•Œλ³΄λ‹€ 포인터 λ³€μˆ˜λ₯Ό λ‹€λ£° λ•Œ μ‹€μˆ˜ν•  ν™•λ₯ μ΄ 더 λ†’κΈ° λ•Œλ¬Έμ—,

 

const ν‚€μ›Œλ“œλ₯Ό μ μ ˆν•˜κ²Œ 잘 ν™œμš©ν•˜λ©΄ μ‹€μˆ˜λ‘œ μΈν•œ 버그(μ˜λ―Έμƒ 였λ₯˜)λ₯Ό 쀄일 수 μžˆλ‹€.

 

λ°˜μ‘ν˜•
Contents

ν¬μŠ€νŒ… μ£Όμ†Œλ₯Ό λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€

이 글이 도움이 λ˜μ—ˆλ‹€λ©΄ 곡감 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.