C 언어 배열 유형 이해

던지는 벽돌 : 배열 유형, 초보자를 부수는 3 개의 산
1, 배열 유형; 배열 이름
2, 배열 포인터; 배열 이름 또는 상위 수준과 동일한 수준에 & 할당 필요
3, 배열 유형과 배열 포인터 간의 관계 ;

먼저 1 차원 배열을 예로 들어 보겠습니다. int a [10]; int * a1; int (* a2) [10];
a; a 배열의 첫 번째 주소는 포인터이고 가리키는 유형은 다음과 같습니다. int, 그러면 a는 a1과 비교할 수 있습니다. 차이점은 a는 상수이고 수정할 수 없다는 것입니다. a = a + 1,이 수정과 a1은 변수이며 둘 다 더하거나 뺄 수 있습니다.
a1; int 유형에 대한 포인터입니다.
사실 포인터는 int [10]의 배열 유형을 가리 킵니다. 따라서 데이터 유형이 정렬되도록 a2 = & a;입니다.

2 차원의 경우 int b [] [10]; int ( b1) [10]; 마찬가지로 b는 상수이고 변경할 수 없으며 b1은 변수입니다.
b; b는 배열의 첫 번째 주소입니다. 즉, 포인터가 int [10]의 배열을 가리 키므로 더하기와 빼기의 기본 단위는 40 바이트입니다.
따라서 b + 1은 두 번째 행의 첫 번째 주소이고
(b + 1)은 배열의 두 번째 행의 첫 번째 주소입니다. 그런 다음 take *는 배열의 값입니다.
그리고 b1이 가리키는 유형은 b와 동일하므로 2 개는 b1 = b가 될 수 있습니다.

#include <stdio.h>

int main()
{
	int b = 10;
	int a[10]={1,5,3,4,10,6,7,8,9,0};
	int a1[][10]={
					{1,2,3,4,5,6,7,8,9,0},
					{10,2,3,4,5,6,7,8,9,0}
				};
	printf("%d\n",b);//b变量做右值表示取值 
	b = 12; //b变量做左值表示操作b空间。 
	printf("%d\n",*(a+1)); //a是一个地址,其加法的基本单位是int(因为下一层次是int类型)加4再取值就是第二个元素 
	printf("%d\n",(*a+1));//先取值再加1.
	
	//同理理解二维数组。
	//a1+1;则表示跳转到第二行,表示第二行的首地址,是第二行的地址而不是第二行数组的首地址
	//*(a1+1);这个才表示第二行数组的首地址。打印的值是一样的,但是其数据类型不是一样的。 
	printf("%d\n",*(*(a1+1)+2));
	以上是数组类型的测试/
	///下面是关于数组指针类型的测试///
	int *p = NULL;
	int (*p1)[10] = NULL;//优先级问题,* []是同一等级再从右往左,因此要打括号。 
	p = a;
	printf("%d\n",*(p+1));
	p1 = &a;
	printf("%d\n",*((*p1+1)+1));
	p1 = a1;
	printf("%d\n",*((*p1+1)+1));
	return 0;
}

추천

출처blog.csdn.net/zw1996/article/details/84705948