lierre

c언어 포인터 배열 예제

3) 루프에서 증분 연산 (p ++)은 다음 위치 (다음 요소의 위치)를 얻기...

02 Août

3) 루프에서 증분 연산 (p ++)은 다음 위치 (다음 요소의 위치)를 얻기 위해 포인터 변수에서 수행되며,이 산술은 각 데이터에서 사용되는 바이트가 있더라도 모든 유형의 배열 (모든 데이터 유형 이중, char, int 등)에 대해 동일합니다. 유형이 다릅니다. 여기서 ptr은 10개의 정수 배열을 가리킬 수 있는 포인터입니다. 하위 스크립트는 간접보다 우선 순위가 높기 때문에 괄호 안에 간접 연산자와 포인터 이름을 둘러싸야 합니다. 여기서 ptr의 유형은 `10개의 정수 배열에 대한 포인터`입니다. 참고 : 배열의 0 요소를 가리키는 포인터와 전체 배열을 가리키는 포인터는 완전히 다릅니다. 다음 프로그램은 이것을 보여줍니다 : ptr은 4 정수의 배열에 대한 포인터이기 때문에 ptr + ith 행을 가리킵니다. ptr + i를 디참조할 때 ith 행의 기본 주소를 얻습니다. ith 행의 jth 요소의 주소에 액세스하려면 포인터 식 *(ptr + i)에 j를 추가할 수 있습니다. 따라서 포인터 표현식 *(ptr + i) + j는 ith 행의 jth 요소의 주소를 제공하고 포인터 식 *(ptr + i)+j)는 ith 행의 jth 요소의 값을 제공합니다. 포인터 표현식 *(ptr + i) + j)는 서브스크립트 식 ptr[j]와 동일하다는 것을 알고 있습니다.

따라서 2-D 배열의 기본 주소를 포함하는 포인터 변수가 있는 경우 해당 포인터 변수를 두 번 서브스크립팅하여 배열 요소에 액세스할 수 있습니다. 3차원 어레이는 3-D 어레이의 각 엘리먼트가 2-D 배열로 간주되는 배열로 간주할 수 있다. 3-D 배열 arr은 각 엘리먼트가 2-D 배열인 두 개의 요소로 구성된 배열로 간주될 수 있다. 배열 arr의 이름은 0번째 2-D 배열에 대한 포인터입니다. 따라서 포인터 표현식 *(*(*(arr + i) + j) + k)는 서브스크립트 식 arr[j][k]와 동일합니다. 우리는 표현식 *(arr + i)이 arr와 동등하고 표현 *(arr + i) + j)이 동등한 arr[j]라는 것을 알고 있습니다. 따라서 arr는 ith 2-D 배열의 기본 주소를 나타내고 arr[j]는 jth 1-D 배열의 기본 주소를 나타낸다고 말할 수 있습니다. 위의 프로그램에서 포인터 *p는 배열에 저장된 모든 값을 하나씩 인쇄합니다. 또한 기본 주소(위의 경우)를 사용하여 포인터 역할을 하고 모든 값을 인쇄할 수도 있습니다. 포인터 식을 다시 참조할 때 해당 포인터 식을 가리키는 값을 얻습니다. 배열에 대한 포인터는 배열을 가리키므로 참조를 해제하면 배열을 얻어야하며 배열 이름은 기본 주소를 나타냅니다. 따라서 배열에 대한 포인터가 반참조될 때마다 배열이 가리키는 배열의 기본 주소를 얻습니다.

다음 그림은 포인터 p 및 ptr을 보여 주며 ptr을 보여 주습니다. 화살표가 더 어둡게 표시되어 배열에 대한 포인터를 나타냅니다. 두 번째 접근 방식에서 메모리 낭비는 더, 따라서 이러한 경우에 포인터를 사용하는 것이 선호된다. 앞에서 설명한 것처럼 포인터는 다른 변수의 주소를 저장할 수 있는 특별한 종류의 변수입니다. 일반적으로 arr[n-1]은 배열의 n번째 요소에 액세스하는 데 사용할 수 있습니다. 여기서 n은 정수 번호입니다.