본문 바로가기

Language/C

배열

배열 포인터

여러 표현 방식

*(ptr+i) == ptr[i] == i[ptr] == *(i+ptr)
//3번째는 이론으로만 알고 쓰지는 X
ptr == &ptr[0];
*ptr == ptr[0];
ptr+1 == ptr에 sizeof(*ptr)을 더한 값

배열 포인터 선언

int main(){
    int arr[3] = {1,2,3};

    int(*ptr_arr)[3];//길이 3인 int형 배열을 가리키는 포인터를 선언
    ptr_arr = &arr;
}

예제

int main(){
    int arr[2][3]={1,2,3,4,5,6};

    for(int(*row)[3] = arr; row < arr+2; row++){
        for(int *col = *row; col<*row+3; col++){
            printf("%d ", *col);
        }
        printf("\n");
    }
}

2차원 배열과 배열 포인터

int main(){
    int arr[2][3] = {{1,2,3},{4,5,6}};

    sizeof(arr); // 24
    sizeof(arr[0]); //12
    sizeof(arr[0][0]); //4

    //&arr == &arr[0] == &arr[0][0]

    int(*ptr)[3] = arr;
    int(*ptr)[3] = &arr[0];

    //printf("%d ", ptr[i][j]);로 출력 가능
}

ptr = arr == ptr = &arr[0] 즉, ptr은 arr[0]을 가리키고 있다.

배열을 매개변수로 넘기기

//call-by-value: 값만
//call-by-reference: 참조

void printArr(int *arr){
    for(int i=0;i<4;i++) arr[i]*=2;
}
void printArr(int arr[4]){

}
//both of the above are call-by-reference
//arr == &arr[0]

int main(){
    int arr[4] = {1,2,3,4};
    printArr(arr);
}
//2-dimension-array
void printArr(int n(*arr)[3]){
    for(int i=0;i<2;i++){
        for(int j=0;j<3;j++)
            printf("%d ", arr[i][j]);
    }
}

int main(){
    int arr[2][3] = {{1,2,3},{4,5,6}};
    printArr(arr);
}

'Language > C' 카테고리의 다른 글

[C] 함수 포인터  (0) 2021.08.21
[C] 문자열  (0) 2021.08.21