<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=%EC%83%88%EC%8B%B9C%EC%8A%A4%ED%84%B0%EB%94%942005%2Fpointer</id>
	<title>새싹C스터디2005/pointer - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=%EC%83%88%EC%8B%B9C%EC%8A%A4%ED%84%B0%EB%94%942005%2Fpointer"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9C%EC%8A%A4%ED%84%B0%EB%94%942005/pointer&amp;action=history"/>
	<updated>2026-05-15T01:45:58Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9C%EC%8A%A4%ED%84%B0%EB%94%942005/pointer&amp;diff=52381&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:29, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9C%EC%8A%A4%ED%84%B0%EB%94%942005/pointer&amp;diff=52381&amp;oldid=prev"/>
		<updated>2021-02-07T05:29:41Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;보다 명확한 포인터 설명을 위한 예제와 자료들&lt;br /&gt;
----&lt;br /&gt;
__TOC__&lt;br /&gt;
----&lt;br /&gt;
== 간단 문제 ==&lt;br /&gt;
답은 페이지 하단에 있습니다.&lt;br /&gt;
1.&lt;br /&gt;
 int a = 1;&lt;br /&gt;
 int b = 2;&lt;br /&gt;
 int* c;&lt;br /&gt;
 int* d;&lt;br /&gt;
 c = &amp;amp;amp;a;&lt;br /&gt;
 d = &amp;amp;amp;a;&lt;br /&gt;
 b = 4;&lt;br /&gt;
 a = 3;&lt;br /&gt;
 &lt;br /&gt;
 *c + a + *d = ?&lt;br /&gt;
== 예제 ==&lt;br /&gt;
=== Swap ===&lt;br /&gt;
두 수의 값을 변경한다.&lt;br /&gt;
포인터를 쓰지 않을 경우와 비교하면 이해가 쉽다.&lt;br /&gt;
 #include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 void Swap(int* aX, int* aY);&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     int x = 1;&lt;br /&gt;
     int y = 2;&lt;br /&gt;
 &lt;br /&gt;
     printf(&amp;quot;x = %d\ny = %d\n이 변수의 값을 교환합니다.\n&amp;quot;, x, y);&lt;br /&gt;
     &lt;br /&gt;
     Swap(&amp;amp;amp;x, &amp;amp;amp;y);&lt;br /&gt;
     &lt;br /&gt;
     printf(&amp;quot;x = %d\ny = %d\n&amp;quot;, x, y);&lt;br /&gt;
   &lt;br /&gt;
     system(&amp;quot;PAUSE&amp;quot;);	&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void Swap(int* aX, int* aY){&lt;br /&gt;
      int temp;&lt;br /&gt;
      temp = *aX;&lt;br /&gt;
      *aX = *aY;&lt;br /&gt;
      *aY = temp;&lt;br /&gt;
 }&lt;br /&gt;
 #include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 void Swap(int aX, int aY);&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     int x = 1;&lt;br /&gt;
     int y = 2;&lt;br /&gt;
 &lt;br /&gt;
     printf(&amp;quot;x = %d\ny = %d\n이 변수의 값을 교환합니다.\n&amp;quot;, x, y);&lt;br /&gt;
     &lt;br /&gt;
     Swap(x, y);&lt;br /&gt;
     &lt;br /&gt;
     printf(&amp;quot;x = %d\ny = %d\n&amp;quot;, x, y);&lt;br /&gt;
   &lt;br /&gt;
     system(&amp;quot;PAUSE&amp;quot;);	&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void Swap(int aX, int aY){&lt;br /&gt;
      int temp;&lt;br /&gt;
      temp = aX;&lt;br /&gt;
      aX = aY;&lt;br /&gt;
      aY = temp;&lt;br /&gt;
 }&lt;br /&gt;
=== 배열의 출력 ===&lt;br /&gt;
배열이름은 배열 맨앞(array&amp;amp;#91;0&amp;amp;#93;)을 나타낸다.&lt;br /&gt;
int array&amp;amp;#91;5&amp;amp;#93; = {1,2,3,4,5}에서 array&amp;amp;#91;i&amp;amp;#93;가 뜻하는 것은 *(array+i)이다.&lt;br /&gt;
 #include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 void ArrayOutput(int* aArray, int aSize);&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     int array[] = {1, 2, 3, 4, 5};&lt;br /&gt;
     &lt;br /&gt;
     printf(&amp;quot;배열을 출력합니다.\n&amp;quot;);&lt;br /&gt;
     ArrayOutput(array, sizeof(array)/sizeof(int));&lt;br /&gt;
     &lt;br /&gt;
     int array2 = *(array+2);&lt;br /&gt;
     printf(&amp;quot;\narray[2]의 값은 %d입니다\n&amp;quot;, array2);&lt;br /&gt;
     system(&amp;quot;pause&amp;quot;);&lt;br /&gt;
     return 0;    &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void ArrayOutput(int* aArray, int aSize){&lt;br /&gt;
      int i;&lt;br /&gt;
      &lt;br /&gt;
      for (i=0; i&amp;amp;lt;aSize; i++){&lt;br /&gt;
          printf(&amp;quot;array[%d] = %d\n&amp;quot;, i, aArray[i]);&lt;br /&gt;
      }&lt;br /&gt;
 }&lt;br /&gt;
=== [[이영호]] 작성 ===&lt;br /&gt;
 main(){&lt;br /&gt;
 int a;&lt;br /&gt;
 int *pb, **pc;&lt;br /&gt;
 &lt;br /&gt;
 a=10;&lt;br /&gt;
 pb=&amp;amp;amp;a;&lt;br /&gt;
 pc=&amp;amp;amp;pb;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 	printf(&amp;quot;\n\n\n\tint a=10, *pb=&amp;amp;amp;a, **pc=&amp;amp;amp;pb\n\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 	printf(&amp;quot;\t\t&amp;amp;amp;pc=%d\tpc=%d\t*pc=%d\t**pc=%d\n&amp;quot;, &amp;amp;amp;pc, pc, *pc, **pc);&lt;br /&gt;
 	printf(&amp;quot;\t\t&amp;amp;amp;pb=%d\tpb=%d\t*pb=%d\n&amp;quot;, &amp;amp;amp;pb, pb, *pb);&lt;br /&gt;
 	printf(&amp;quot;\t\t&amp;amp;amp;a=%d\ta=%d\n\n\n\n&amp;quot;, &amp;amp;amp;a, a);&lt;br /&gt;
 &lt;br /&gt;
 	printf(&amp;quot;\t\ta=%d\t\t*pb=%d\t\t**pc=%d\n&amp;quot;, a, *pb, **pc);&lt;br /&gt;
 	printf(&amp;quot;\t\t&amp;amp;amp;a=%d\tpb=%d\t*pc=%d\n&amp;quot;, &amp;amp;amp;a, pb, *pc);&lt;br /&gt;
 	printf(&amp;quot;\t\t&amp;amp;amp;pb=%d\tpc=%d\n\n\n\n&amp;quot;, &amp;amp;amp;pb, pc);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 	int a=10, *pb=&amp;amp;amp;a, **pc=&amp;amp;amp;pb&lt;br /&gt;
 &lt;br /&gt;
 		&amp;amp;amp;a=2293620	a=10&lt;br /&gt;
 		&amp;amp;amp;pb=2293616	pb=2293620	*pb=10			// pb의 값은 a의 주소이다.&lt;br /&gt;
 		&amp;amp;amp;pc=2293612	pc=2293616	*pc=2293620	**pc=10&lt;br /&gt;
 		// pc의 값은 *pb변수의 주소이다. 그리고 *pc는 pb의 값을 나타낸다. **pc는 *pb(==a)의 값을 나타낸다.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 		a=10		*pb=10		**pc=10&lt;br /&gt;
 		&amp;amp;amp;a=2293620	pb=2293620	*pc=2293620&lt;br /&gt;
 		&amp;amp;amp;pb=2293616	pc=2293616&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 위에서 pc를 (변수)라고 가정하자.&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;amp;(변수) -&amp;amp;gt; 항상 변수1의 주소를 뜻한다.&lt;br /&gt;
 (변수) -&amp;amp;gt; 항상 변수의 값을 뜻한다. &lt;br /&gt;
 &lt;br /&gt;
 별표가 붙은 것은 (변수)의 값이 아니다. 값은 항상 (변수)에만 들어간다. (pc = &amp;amp;amp;pb)&lt;br /&gt;
 &lt;br /&gt;
 별표가 나타내는 값은 포인터가 가리키는 값(주소)의 값이다.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 **pc에서 중요한 것은 **pc자체의 주소인 &amp;amp;amp;pc와 **pc의 값인 pc 뿐이다. 별표는 그 변수가 표시하고 있는 메모리 주소(여기에선 값)로 이동해서 그 값을 출력하는 것이라고 생각하면 편하다.&lt;br /&gt;
 &lt;br /&gt;
 pc == *(&amp;amp;amp;pc)&lt;br /&gt;
 *pc == **(&amp;amp;amp;pc)&lt;br /&gt;
&lt;br /&gt;
== 간단 문제 정답 ==&lt;br /&gt;
# 9  &lt;br /&gt;
----&lt;br /&gt;
 음... swap 함수에서 값이 정수(배열, 포인터 주소를 제외한 모든 값.)일 경우 xor 치환으로 간단하게 변경 가능합니다.&lt;br /&gt;
 a^=b;&lt;br /&gt;
 b^=a;&lt;br /&gt;
 a^=b;&lt;br /&gt;
 - [이영호]&lt;br /&gt;
&lt;br /&gt;
[[새싹C스터디2005]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>