C 언어의 2 단 포인터 (2 단 포인터)
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 차원 지침 을 사용 하 는 것 도 고려 해 보 자.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
바이너리 파일cat 또는tail, 터미널 디코딩 시 처리 방법cat으로 바이너리 파일을 보려고 할 때 코드가 엉망이 되어 식은땀이 났다. 웹에서 스크롤된 정보의 처리 방법과alias의 설정을 요약합니다. reset 명령을 사용하여 터미널을 재설정합니다.이렇게 하면 고치지 못하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.