C 언어 2 차원 배열의 포인터 문제

2 차원 배열의 포인터 문제를 간략하게 소개하기 위해 2 차원 배열 a [3] [2]를 예로 들어 보겠습니다.

1. 기본 의미

1. a [3] [2]는 3 개의 행과 2 개의 열이있는 2 차원 배열을 나타냅니다. a [0], a [1], a [2]는 0 번째 행, 첫 번째 행 및 첫 번째 요소를 나타냅니다. 두 번째 행, 각각 Of 地址.
2. 배열 이름 a는 본질적으로 1 차원 배열 ( 数组指针)에 대한 포인터 입니다.이 경우 a 배열의 0 번째 행입니다.
참고 : 배열 이름 a의 의미도 & a [0]과 동일합니다.

2. & a [0]과 a [0]의 차이점 :

둘 다로 표시되는 주소 값동일 하지만 유형과 의미가 다릅니다.

& a [0]과 a [0]은 모두 a 배열 의 0 번째 행과 0 번째 열에있는 요소의 첫 번째 주소를 가리 키지 만 & a [0]은 기본적으로 1 数组指针이고 a [0]은 기본적으로 1 指向int类型的指针입니다.

이것으로부터 우리는 추론 할 수 있습니다 : & a [0] +1과 a [0] +1은 또한 다른 의미를가집니다 :

& a [0] +1은 배열의 첫 번째 행과 0 번째 열의 요소 주소를 가리키고 a [0] +1은 배열의 0 번째 행과 첫 번째 열의 요소 주소를 가리 킵니다.

3. 2 차원 배열에서 값 연산자 * 적용

*(a[1]+1)주소 요소의 값 나타내는 a [1] +1과 같이 기본 데이터를 가리키는 포인터 변수 의 경우;

이 경우 &a[1]+1或a+2값 연산자 결과는 int * 유형 인 행의 0 번째 요소 주소를 나타냅니다.

요약하면 문장입니다. 기본 데이터 유형에 대한 포인터를 가져 오면 반환 결과는 해당 값이고 다른 유형의 포인터를 가져 오면 반환 결과는 해당 포인터 변수로 다운 그레이드됩니다.

4. 관련 테스트 코드

#include <stdio.h> 

int main()
{
    
    
	int a[3][2] = {
    
    1,2,3,4,5,6};
	printf("a = %p\n&a[0] = %p\na[0] = %p\n",a,&a[0],a[0]);
	printf("-------------------\n");
	printf("&a[0] + 1 = %p\na[0] + 1 = %p\n",&a[0] + 1,a[0] + 1);
	printf("-----取值运算符-----\n");
	printf("*(a[1] + 1) = %d\n&a[1] + 1 = %p\na + 2 = %p\n",*(a[1] + 1),&a[1] + 1,a + 2);
	return 0;
}

추천

출처blog.csdn.net/m0_46550452/article/details/108954271