C - 더 많은 포인터, 배열 및 문자열

4560 단어 stringpointerscarray
아직 포인터가 완료되지 않았습니다. 이전 블로그 게시물을 보지 못했다면 확인하는 것이 좋습니다.
따라서 이 블로그 게시물에서는 더 많은 포인터에 대해 자세히 살펴보겠습니다.

#C – 포인터에 대한 포인터



포인터에 대한 포인터는 포인터가 다른 포인터의 주소를 보유하는 체인 포인터의 한 형태입니다.

포인터에 대한 포인터 선언은 이름 앞에 별표를 추가하여 수행됩니다.
n개의 별표()가 있는 포인터는 n - 1개의 별표()가 있는 포인터의 주소를 보유할 수 있습니다.
TYPE **VAR_NAME;
이 경우 이중 별표()가 있는 포인터는 단일 별표()가 있는 포인터의 주소를 보유할 수 있으며 동일한 값을 갖습니다.

예시

Output


이 예를 일반화하려면:num == *ptr1 == **ptr2&num == ptr1 == *ptr2&ptr1 == ptr2
변수 선언 시 이 예제의 메모리 레이아웃은 다음과 같습니다.






num에 값 10을 할당한 후 메모리 레이아웃은 다음과 같습니다.







num의 주소를 ptr1에 추가하고 ptr1을 ptr2에 추가한 후 메모리 레이아웃은 다음과 같습니다.







위의 표에서 볼 수 있듯이 개념을 더 잘 이해하기 위해 변수의 주소를 나타내는 데 숫자를 사용했습니다. 주소는 가장 일반적으로 어떤 형태의 16진수 형식으로 예제의 출력과 같이 입력됩니다.

num = 10 및 address = 13의 값 테이블에서 ptr1은 num의 주소를 13의 값으로 유지하고 ptr1의 주소는 17입니다.

이제 테이블 ptr2의 포인터에 대한 포인터에 도달하면 다른 포인터 ptr1의 주소를 값으로 보유하고 ptr2(이중 포인터)의 경우 다른 포인터의 주소를 보유합니다.

#2차원(2D) 배열



2차원 배열은 배열의 배열이라고도 합니다.

2차원 배열을 선언하려면
TYPE ARRAY_NAME[x][Y]
type이 유효한 C 데이터 유형일 수 있는 경우 arrayName은 유효한 C 식별자, x개의 행 및 y개의 열이 됩니다.

2차원 배열을 초기화하기 위해 두 가지 방법을 사용합니다.

int a[3][4] = {{0, 1, 2, 3},{6, 3, 61, 7},{10, 75, 1, 16}};



int a[3][4] = {0,1,2,3,6,3,61,7,10,75,1,16};


2D 배열을 사용하면 선언 중에 요소를 지정하더라도 항상 두 번째 차원을 지정해야 합니다.

int a[][] = {1, 2, 3 ,4 }


두 번째 값이 지정되지 않았기 때문에 유효하지 않습니다.

예시


Output

다음 예제의 메모리 레이아웃은



좋은 웹페이지 즐겨찾기