1619, 1/81 회원가입  로그인  
   wjsqud011
   http://없다.
   [머리속] C언어 포인터와 함수에 대해...

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



    
rlaehgus9624 저기 제가 오늘 프로그래밍에 관심가진지 일주일도 안된 새내기인데여
{ 치고 안에 소스를 입력할때 가운데에 어떻게 치나요?ㅠ
2011/08/18  
wjsqud011 ??? 무슨 말씀을 하시는 이해가 안됩니다.
비주얼C++ 6.0을 기준으로
소스를 입력하면 중괄호가 입력하고 나서 엔터를 치면 자동으로 탭이 입력이 됩니다.

위 소스중 가운데 라고 하면 //을 말씀하시는 거 아닌가요??
//,/*는 주석으로 프로그래머 한테 설명하는 글입니다. 컴퓨터한테는 아무런 의미는 없지만 프로그래머 한테는 엄청난 큰 의미가 있습니다. 자세한 설명은 C언어 프로그래밍 책을 참고해주세요.

그리고 출력할때 가운데 정렬은 없습니다. 다만 탭 기능을 하는 것은 있습니다.
2011/08/19