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