C 언어의 2 단 포인터 (2 단 포인터)

오리지널 작품, 전재 출처 표시http://blog.csdn.net/yming0221/article/details/7220688
C 언어 더 보기
C 언어 사용 주의사항 (1)
C 언어 사용 주의사항 (2)
C 언어 사용 주의사항 (3)
2 급 지침 을 쌍 지침 이 라 고도 부른다.C 언어 에는 인용 이 존재 하지 않 기 때문에 포인터 의 값 을 바 꾸 려 고 할 때 2 급 지침 을 사용 해 야 합 니 다.C + + 에 서 는 인용 형식 을 사용 하여 구현 할 수 있 습 니 다.
다음은 C 의 2 급 지침 사용 방법 을 설명 한다.
예 를 들 어 우 리 는 포인터 로 두 개의 정형 변수의 값 을 교환 합 니 다.
오류 코드 는 다음 과 같 습 니 다:
1 단 지침
#include 

void swap(int *a,int *b)
{
        int *tmp=NULL;
        tmp=a;
        a=b;
        b=tmp;
}

int main(int argc,char **argv)
{
        int a=2;
        int b=3;
        printf("Before swap a=%d  b=%d
",a,b); swap(&a,&b); printf("After swap a=%d b=%d
",a,b); return 0; }

출력의 구 조 는 다음 과 같다.
결과 분석: 수치 든 지침 이 든 swap 함수 의 매개 변 수 는 항상 값 을 전달 하기 때문에 상기 함수 에서 a 와 b 의 주소 가 swap 함수 에 전달 되 었 더 라 도 함수 에서 a 와 b 의 값 (main 함수 에서 a 의 주소 와 b 의 주소) 을 교환 하고 교환 이 완료 되면 함수 에 해당 하 는 매개 변 수 는 스 택 에서 팝 업 되 며 호출 함수 에 되 돌아 갈 수 없습니다.그래서 이 swap 함수 의 조작 은 헛수고 입 니 다.
여 기 는 a 와 b 의 값 을 직접 교환 할 수 있 지만 a 와 b 가 32 비트 의 정형 변수 가 아니 라 복잡 한 데이터 구조 라면 효율 을 낮 출 수 있다.아래 와 같다.
void swap(TYPE *a,TYPE *b)
{
        TYPE tmp;
        tmp=*a;
        *a=*b;
        *b=tmp;
}

2 단 지침
다음은 2 급 포인터 로 메모 리 를 분배 하 는 예 입 니 다.
#include 
#include 
#include 
void memorylocate(char **ptr)
{
        *ptr=(char *)malloc(10*sizeof(char));
}
int main(int argc,char **argv)
{
        char *buffer;
        memorylocate(&buffer);
        strcpy(buffer,"12345");
        printf("buffer %s
",buffer); return 0; }

지침 의 값 을 바 꾸 려 면 2 차원 지침 을 사용 하 는 것 도 고려 해 보 자.

좋은 웹페이지 즐겨찾기