학습 노트---사용자 정의 함수 향상---1

사용자 정의 함수 향상 제1부분
매개변수 전송:
값 전달
의미: 형식 매개 변수에 공간을 분배한 후 실제 매개 변수의 값을 형식 매개 변수에 부여
특징: 형식 파라미터에 대한 어떠한 조작도 실제 파라미터에 영향을 주지 않는다
코드 예:
#include <stdio.h>
#include <stdlib.h>
/*
             
*/

void myswap(int,int);

int main()
{
    int a,b;
    scanf("%d%d",&a,&b);
    printf("     :%d,%d
",a,b); myswap(a,b); printf(" :%d,%d
",a,b); return 0; } void myswap(int x,int y) { // x y , int t; t=x; x=y; y=t; }

결과:
해결:
우리가 형삼에 대한 조작이 실삼에 영향을 미치지 않는다는 것을 알 수 있다.
주소 전달
의미: 형식 매개 변수에 공간을 분배한 후 실제 매개 변수의 주소를 형식 매개 변수에 부여합니다
특징: 실제 파라미터의 주소를 이용하여 함수에서 실제 파라미터의 값을 직접 조작한다.
코드 예:
#include <stdio.h>
#include <stdlib.h>
/*
              
*/

void myswap(int*,int*);//                 

int main()
{
    int a,b;
    scanf("%d%d",&a,&b);
    printf("     :%d,%d
",a,b); myswap(&a,&b);// printf(" :%d,%d
",a,b); return 0; } void myswap(int *x,int *y) { // x y , int t; t=*x; *x=*y; *y=t; }

결과:
해결:
1. 변수의 주소를 가져와서 파라미터의 유효한 범위의 장애를 뛰어넘어 변수를 직접 조작하는 것은 지침의 묘용이다
2. 포인터를 함수 형식의 매개 변수로 사용할 때 실제 매개 변수는 주소만 사용할 수 있다.그렇지 않으면'노 포인터'가 나타납니다(노 포인터는 포인터 변수 편에서 상세하게 설명되어 있습니다)
함수 반환:
다른 데이터 형식으로 돌아가기
이미 기초편 해석
반환 포인터
형식: 유형 식별자* 함수명(형식 매개 변수 표열),
코드 예:
#include <stdio.h>
#include <stdlib.h>
/*
               
*/
int *max(int*,int*);//     ,         


int main()
{
    int a,b,*p;
    scanf("%d%d",&a,&b);
    p=max(&a,&b);//           
    printf("max=%d
",*p); return 0; } int *max(int *x,int *y) { int *t; if(*x>*y) { t=x; } else { t=y; } return t;// t }

결과:
해결:
포인터 변수를 조작해도 정형 변수를 직접 조작하는 것과 같은 효과를 볼 수 있다.이런 바늘을 전달하고 바늘을 되돌려 주는 기교는 일반적으로 문자, 문자열을 조작할 때 대량으로 사용된다.하지만 여기는 정형을 활용해 소개할 뿐이다.
주요 사항:
반환 값은 이미 효력을 상실한 주소가 될 수 없습니다
코드 예:
#include <stdio.h>
#include <stdlib.h>
/*
            (            )
*/


int *max(int*,int*);


int main()
{
    int a,b,*p;
    scanf("%d%d",&a,&b);
    p=max(&a,&b);
    printf("max=%d
",*p); return 0; } int *max(int *x,int *y) { int t; if(*x>*y) { t=*x; } else { t=*y; } return &t; }

결과:
컴파일할 때:
실행 중:
해결:
위와 같이 프로그램은 컴파일할 때 경고합니다. 국부 변수의 주소 값을 되돌려줍니다.하지만 운행할 때는 모든 것이 정상인 것 같다.
이것은 t가 max 함수의 국부 변수로서 실행할 때 메모리에서 데이터를 저장하는 독립된 저장 공간을 얻기 때문이다.
max 함수가 되돌아올 때 t를 저장하는 데 사용되는 이 메모리 공간은 방출됩니다. (이 프로그램의 전용 메모리 공간이 아니라 다른 프로그램도 이 메모리 공간을 호출할 수 있습니다.)그 다음main 함수에서 t의 주소를 통해 이 메모리 공간에 접근할 때, 비록 이 메모리 공간은 이 프로그램의 전용 메모리 공간이 아니지만.그러나 우리는 그것을 호출해서 저장된 값의 출력을 얻을 수 있다.
그러나 이 메모리 공간은 우리 프로그램만 호출할 수 있는 것이 아니라는 것을 명확히 해야 한다.다른 같은 실행 중인 프로그램도 호출할 수 있습니다!그래서 만약에 이전에 이 메모리 공간이 다른 프로그램에 호출된 후에 그 안에 저장된 값을 수정했다(예를 들어 값이 2로 수정되었다).그러면 우리 프로그램이 이 값을 다시 호출할 때, 얻을 수 있는 것은 수정된 값입니다.(위의 출력은:max=2)이 될 수 있습니다.
만약에 우리가main에서 이 메모리를 호출하기 전에 이 메모리 공간은 다른 프로그램에 의해 점용되고 방출되지 않으면 우리의 프로그램은 호출 오류로 인해 닫힐 수도 있다!
이런 상황도 사실상 일종의 '야생 지침' 이다
값 전달
의미: 형식 매개 변수에 공간을 분배한 후 실제 매개 변수의 값을 형식 매개 변수에 부여
특징: 형식 파라미터에 대한 어떠한 조작도 실제 파라미터에 영향을 주지 않는다

좋은 웹페이지 즐겨찾기