기본적으로 배열에 몇 개의 행이 있는지 알 필요가 없습니다. 차원이 선언 된 이유는 컴퓨터가 2-D 배열에서 indice가 가리키는 메모리 위치에 액세스 할 수 있도록하기 위해서 다음을 사용합니다 (4-D 배열을 찾을 수는 없습니다)
주소 = 자료 + ((depthindex * col_size + colindex) * row_size + rowIndex에) * Element_Size이
그래서 여기에 작은 예입니다은 우리가 그것을 액세스로 이동합니다 우리가
int myArray[2][2];
/* put some values in the array */
myFunc(myArray);
다음 한 말
void myFunc(int array[][2])
{
printf("%d\n", &array[1][1]);
}
와 같은 기능
기본적으로 myArray [1] [1]에 해당하는 배열 [1] [1]의 주소는 위의 수식을 사용하여 계산됩니다. 해당 주소로 이동하면 4 바이트를 정수로 해석하고 화면에 인쇄합니다. . 함수가 배열에 얼마나 많은 행이 있는지 신경 쓰지 않는 이유는 C가 경계 검사를하지 않는다는 것입니다. 수식을 보면 수식을 사용하여 모든 인덱스의 메모리 주소를 계산하는 방법 만 알면됩니다. 행 수는 필요하지 않습니다 (행 크기는 열 수를 기반으로합니다). 따라서 C는 메소드 선언에서 행 수를 생략하는 것에 만족합니다.이 정보없이 메모리 주소를 계산할 수 있기 때문에
선언입니까? 함수 매개 변수에 대한? –
이 선언자의 의미는 함수 선언자가 사용되는 곳 (즉, 함수 선언자 또는 변수 정의의 일부)에 따라 다릅니다. –
배열 변수를 선언 할 때 * 가장 바깥 쪽 배열 범위가 이니셜 라이저에서 유추됩니다. 함수 인수로 전달되면 배열은 포인터로 붕괴되므로 가장 바깥에있는 배열 범위 또한 무의미합니다. –