>  기사  >  백엔드 개발  >  배열 포인터와 포인터 배열의 차이점은 무엇입니까

배열 포인터와 포인터 배열의 차이점은 무엇입니까

青灯夜游
青灯夜游원래의
2021-07-13 11:31:003939검색

차이점: 포인터 배열 자체는 배열이고 배열의 요소는 포인터입니다. 즉 배열이 포인터를 저장하는 경우 배열이 차지하는 바이트 수는 배열 포인터 자체에 의해 결정됩니다. 배열을 가리키는 포인터, 즉 배열에 대한 포인터이며 32비트 시스템에서 항상 4바이트를 차지합니다.

배열 포인터와 포인터 배열의 차이점은 무엇입니까

이 튜토리얼의 운영 환경: Windows 7 시스템, c99 버전, Dell G3 컴퓨터.

많은 C 프로그래머들이 포인터 배열과 배열 포인터의 개념에 대해 혼동하고 있다고 생각합니다. 두 개의 간단한 문을 통해 둘 사이의 차이점을 분석해 보겠습니다. 샘플 코드는 다음과 같습니다.

int *p1[5];
int (*p2)[5];

먼저 "int*p1[5]" 문에 대해 "[]"가 " *"보다 우선 순위가 높기 때문입니다. 더 높으므로 p1은 먼저 "[]"와 결합하여 배열의 정의를 형성합니다. 배열의 이름은 p1이고 "int*"는 배열의 내용, 즉 배열의 각 요소를 수정합니다. 즉, 배열에는 그림 1과 같이 int 유형 데이터에 대한 5개의 포인터가 포함되어 있으므로 포인터 배열입니다.

배열 포인터와 포인터 배열의 차이점은 무엇입니까

두 번째로 "int(*p2)[5]" 명령문의 경우 "()"가 "[]"보다 우선순위가 높으며 "*" 기호와 p2는 포인터의 정의를 구성하며, 포인터 변수 이름은 p2이고 int는 배열의 내용, 즉 배열의 각 요소를 수정합니다. 즉, p2는 그림 2와 같이 5개의 int형 데이터를 담고 있는 배열을 가리키는 포인터이다. 분명히 이것은 배열 포인터입니다. 배열에는 이름이 없으며 익명 배열입니다.

배열 포인터와 포인터 배열의 차이점은 무엇입니까

포인터 배열의 경우 우선 배열이고 배열의 요소가 포인터라는 것을 알 수 있습니다. 이는 배열이 포인터를 저장한다는 것을 의미하며 배열이 차지하는 바이트 수는 배열 포인터의 경우 우선 배열을 가리키는 포인터입니다. 즉, 32바이트에서 항상 4바이트를 차지합니다. 비트 시스템이 가리키는 배열이 몇 바이트를 차지하는지는 중요하지 않습니다. 이는 특정 상황에 따라 다릅니다.

포인터 배열과 배열 포인터의 차이점을 이해한 후 계속해서 다음 샘플 코드를 살펴보세요.

int arr[5]={1,2,3,4,5};
int (*p1)[5] = &arr;
/*下面是错误的*/
int (*p2)[5] = arr;

위 샘플 코드에서 &arr는 전체 배열의 첫 번째 주소를 의미하고, arr은 인덱스 배열의 첫 번째 요소의 첫 번째 주소로 표현되는 의미는 다르지만 둘 사이의 값은 동일합니다. 그런 다음 값이 동일하기 때문에 "int(*p1)[5]=&arr" 문은 정확하지만 "int(*p2)[5]=arr" 문은 일부 조건에서 실행되는 이유에 대한 질문이 발생합니다. 컴파일러 오류 메시지가 나타납니다.

사실 그 이유는 아주 간단합니다. C 언어에서는 대입 기호 "="의 양쪽에 있는 데이터 유형이 동일해야 합니다. 서로 다른 경우 명시적 또는 암시적 유형 변환이 필요합니다. 여기서 p1과 p2는 모두 전체 배열을 가리키는 배열 포인터입니다. p1 정의에서 "=" 기호 양쪽의 데이터 유형은 완전히 일치하지만, p2 정의에서 "=" 기호 양쪽의 데이터 유형은 일치하지 않습니다(왼쪽 유형은 포인터입니다). 전체 배열에 적용되고 오른쪽의 데이터 유형은 단일 문자 포인터에 대한 포인터임) 오류 메시지가 표시됩니다.

관련 추천: "C 언어 비디오 튜토리얼"

위 내용은 배열 포인터와 포인터 배열의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.