선언 | 정의 | |
---|---|---|
개념 | 메모리 상의 주소가 정해지지 않고 이름만 알려줌 | 대상의 이름에 대해 대응하는 메모리 상의 주소가 정해지는 것 |
예시 | int a; int x( ); | int a = 1; int x( ) { return 0; } |
초기화 프로그램 세그먼트
int a[100]
for (int i=0; i<100; i++){
a[i];
}
심벌상수 이용
#define N 100
int a[N]
for(int i=0; i<N; i++){
a[i] = 0;
}
int a[2][3] = {1,2,3,4,5,6};
int a[2][3] = {{1,2,3},{4,5,6}};
int a[ ][ ] = {{1,2,3},{4,5,6}};
int a[3][2][2] = { {{1,2}, {3,4}}, {{5,6}, {7,8}}, {{9,10}, {11,12}} };
variable | memory address | a[4][2][3] 예시 계산 |
---|---|---|
list [0][0][0] | α (base address) | 0 |
list [1][1][2] | α +(1 n2 n3) + 1 *n3 + 2 | 0 + 1(23) + 1*(3) + 2= 11 |
list [a][b][c] | α + (a n2 n3) + b *n3 + c | 0 + a23 + b*3 + c = 6a + 3b +c |
Array A[upper 0][upper 1] ... [upper n-1] 에 대해, α가 A[0][0]...[0]의 주소이면,
A[i0][i1]...[in-1] = α + i0 • ( upper1 • upper2 ... • upper n-1 )
+ i1 • ( upper2 • upper3 ... • upper n-1 )
+ i2 • ( upper3 • upper4 ... • upper n-1 )
...
+ i n-2 • ( upper n-1 )
+ i n-1
- 그러므로,모든aj (0≤j<n-1)를미리구해놓은다음(어떻게?...n-2번의곱셈으로), a[i0][i1]...[in-1] 의 주소를 구해야 할 때, n-1번의 곱셈 (O(n))을 하고, n번의 덧셈으로 a[i0][i1]...[in-1] 의 주소를 구할 수 있다.
- 최종적인 time complexity: **O(n)**