Inicio / 포인터 배열 예제

포인터 배열 예제

여기서 ptr은 10개의 정수 배열을 가리킬 수 있는 포인터입니다. 하위 스크립트는 간접보다 우선 순위가 높기 때문에 괄호 안에 간접 연산자와 포인터 이름을 둘러싸야 합니다. 여기서 ptr의 유형은 `10개의 정수 배열에 대한 포인터`입니다. 참고 : 배열의 0 요소를 가리키는 포인터와 전체 배열을 가리키는 포인터는 완전히 다릅니다. 다음 프로그램은 `p`에 첫 번째 요소의 주소를 저장하면 *p, *(p+1), *(p+2) 등을 사용하여 배열 요소에 액세스할 수 있습니다. 포인터와 배열 이름은 거의 상호 교환 적으로 사용할 수 있습니다 – 아래주어진 예는 위에서 설명 한 모든 개념을 보여줍니다. 예외가 있습니다. 배열 이름에 새 포인터 값을 할당할 수 없습니다. 배열 이름은 항상 배열의 첫 번째 요소를 가리킵니다. 위의 함수 KrazyFunction에서 myArray의 첫 번째 요소에 대한 포인터이기 때문에 parm1에 새 값을 할당 할 수 있습니다.

함수가 함수에 인수로 전달된 배열의 배열 요소 중 하나에 포인터를 반환하는 것도 유효합니다. 함수는 컴파일러가 불평하지 않더라도 로컬 변수에 대한 포인터를 반환해서는 안 됩니다. 이제 포인터 산술에 대해 논의할 준비가 되었습니다. 포인터에 정수 값을 추가하고 뺄 수 있습니다. myArray가 일부 배열 유형으로 선언된 경우 j가 정수인 myArray[j]의 식 *(myArray+j)은 해당합니다. 예를 들어 위의 예에서 두 번째 Array[i].num2라는 표현식이 있는 경우 *(secondArray+i).num2 이상으로 작성할 수 있습니다(secondArray+i)->num2. 배열 이름을 상수 포인터로 사용하는 것은 합법적이며 그 반대의 경우도 마찬가지입니다. 따라서 *(balance & 4)는 균형에 있는 데이터에 액세스하는 합법적인 방법입니다[4]. 포인터 형식은 종종 함수 호출에 대한 매개 변수로 사용됩니다. 다음은 포인터를 인수로 사용하는 함수를 선언하는 방법을 보여 주며, C는 함수 인수를 값별로 전달하기 때문에 함수가 호출 루틴에서 값을 수정할 수 있도록 하려면 값에 대한 포인터를 전달해야 합니다. 구조체에 대한 포인터는 함수에서 구조체의 아무 것도 수정되지 않는 경우에도 함수 인수로 사용됩니다.

이 작업은 구조의 전체 내용을 스택에 복사하지 않도록 하기 위해 수행됩니다. 나중에 함수 인수로 포인터에 대해 자세히 소개합니다. 이 프로그램에서는 배열의 0 번째 요소를 가리키는 포인터 pTR이 있습니다. 마찬가지로 배열의 한 요소만 있는 대신 전체 배열을 가리킬 수 있는 포인터를 선언할 수도 있습니다. 이 포인터는 다차원 배열에 대해 이야기할 때 유용합니다. 구문: arr이 3행과 4개의 열이 있는 2-D 배열이고 ptr이 4개의 정수 배열에 대한 포인터이고 pTR에는 배열 arr의 기본 주소가 포함되어 있다고 가정합니다. 위에서 공부한 것처럼 포인터를 사용하여 배열을 가리키고 해당 포인터를 사용하여 배열 요소에 액세스할 수 있습니다. 예를 들어, 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[i][j]와 동일하다는 것을 알고 있습니다.