학습 노트---사용자 정의 함수 향상---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에서 이 메모리를 호출하기 전에 이 메모리 공간은 다른 프로그램에 의해 점용되고 방출되지 않으면 우리의 프로그램은 호출 오류로 인해 닫힐 수도 있다!
이런 상황도 사실상 일종의 '야생 지침' 이다
값 전달
의미: 형식 매개 변수에 공간을 분배한 후 실제 매개 변수의 값을 형식 매개 변수에 부여
특징: 형식 파라미터에 대한 어떠한 조작도 실제 파라미터에 영향을 주지 않는다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
예를 들어 urlopen의 데이터 사용법데이터 매개 변수는 선택할 수 있습니다. 데이터를 추가하려면 바이트 인코딩 형식의 내용, 즉bytes 형식이면bytes () 함수를 통해 전환할 수 있습니다. 또한 이 데이터 매개 변수를 전달하면 GET 방식으로 요...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.