|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1850 [복사]
안녕하세요. 이 글을 보시는 네티즌 여러분.
전병선 입니다.
부족하지만 제가 C언어 포인터와 함수 관계에 대해 제 나름대로 쉽게 설명할려고 합니다.
c언어에서의 포인터는 크게 3가지 입니다.
주소연산자, 간접연산자, 포인터변수
주소연산자 : 변수의 시작주소.
간접연산자 : 그 변수의 주소에 있는 공간.
포인터변수 : 변수의 주소를 저장.
그냥 그러니 하세요...
이제 함수 입니다.
함수는 도구라고 생각하면 됩니다.
예를 들어, printf함수는 화면출력도구라고 생각하시면 됩니다.
printf안에 있는 소스는 볼트와 나사 같은 거라고 보면 됩니다.
[리턴값의 형태] [함수 이름](매개변수)
{
소스들;
}
다음과 같습니다. 용어를 설명하겠습니다.
리턴값의 형태 : Main함수나 다른 함수에게 줄 값의 형태,즉 완성채 Ex: int, float, double, char등등
함수 이름 : 말그대로 설명 뭔 필요가...
매개변수 : Main함수나 다른 함수에서 준 값을 담는 바구니. 즉 재료를 받는 바구니.
참고 void함수는 return값이 없습니다.
이렇게 간단하게 설명하고 이제 함수와 포인터의 긴밀한 관계에 대해 설명하겠습니다.
흔히 우리가 알고리즘이나 기타 여러가지 이유로 정렬을 할때 꼭 들어가는 것이 있습니다.
ms=a[i];
a[i]=a[j];
a[j]=ms;
이렇습니다. 근데 이것을 함수로 그냥 하면 안됩니다. 이때 포인터를 사용하여 값을 서로 바꾸어야 합니다.
Ex)
#include<stdio.h>
void exchange(int *a,int *b) //매개 변수라고 해서 다를거 없습니다. 그냥 재료를 받는 바구니라고 하세요
{
int ms;
ms=*a;//ms에는 *a에 있는 주소에 있는 값을 넣고
*a=*b;//*a에 있는 주소에 있는 값에 *b에 있는 주소에 있는 값을 넣고
*b=ms;//ms는 *b에 있는 주소에 있는 값을 넣는다.
//그리고 exchange함수는 void로 선언을 해서 리턴값이 없습니다.
}
int main()
{
int a=6,b=5;
printf("%d %d\n",a,b);
exchange(&a,&b);//여기서 보면 &를 볼수 있는데 위 매개변수가 포인터 변수이기 때문입니다.
//즉 a변수와 b변수의 주소값을 준다고 보면 됩니다.
printf("%d %d\n",a,b);
return 0;
}
출력값
6 5
5 6
이렇게 될 것 입니다. 설명은 위 소스를 참고해 주시길 바랍니다..
포인터를 쓸때 몇가지 규칙이 있습니다.
1. 배열일 경우 그 배열명이 곧 주소
2. 문자열일경우 &(주소연산자)쓰지마 (ex, a[10]이고 strcpy(a,"test")라고 하지 strcpy(&a,"test")라고 하지는 않는다.)
기타 여러가지가 있지만 갑자기 생각이 안나네요... 그런거는 프로그래밍 하면서 알게 됩니다.
또한 포인터에서 보면 시작값이 있으면 끝값을 알아야 되는데.... 그 끝값을 어떻게 알까요??
바로 컴파일이 알아서 다 해줍니다. 그리고 굳이 끝값을 알고 싶으면
시작값에서 그 자료형의 크기를 더해주세요 그러면 됩니다.
그리고 main도 함수이기 때문에 어디에서 값을 받습니다. 바로 운영체제에서 값을 받습니다.
이것을 어셈블리어 쪽인데.... 그것은 나중에 설명하겠습니다.
또한 함수도 포인터가 있습니다. 그것도 나중에.....
참고 : 욕사절, '뭐가 잘못됬다'라고 하지마세요... 그래도 제가 프로그래밍 할때 아무 지장이 없습니다.ㅠㅠ
|
Hit : 10325 Date : 2011/08/18 12:54
|