Ex55-배열포인터를 사용하지 않고 1차원 포인터 변수에 2차원 배열의 주소를 저장

CODEDRAGON Development/C, C++

반응형

   

배열포인터를 사용하지 않고 1차원 포인터 변수에 2차원 배열의 주소를 저장

1)1차원 포인터 변수에 2차원 배열의 주소를 저장할 경우 에러발생확인

2)에러발생 후 에러 수정

   

   

소스코드

   

#include <stdio.h>

//
함수의 선언
void func(int* p);
//void func(int (*p)[4]);       // Error
수정

int main(void){
                int array[2][4]={10,20,30,40,50,60,70,80};
                func(array);            //
함수의 호출
                return 0;
}



//
함수의 정의
void func(int* p){      // 1
차원 포인터 변수


                printf("%d %d %d %d %d %d %d %d \n", p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7]); // 1
차원으로 접근시 => OK
                printf("%d %d %d %d \n", p[0][0], p[0][1], p[0][2], p[0][3]);   // 2
차원으로 접근시 => 에러
                printf("%d %d %d %d \n", p[1][0], p[1][1], p[1][2], p[1][3]);   // 2
차원으로 접근시 => 에러
}


   

   

출력결과

   

eclipse에서의 Error

void func(int* p){      // 1차원 포인터 변수

   

        printf("%d %d %d %d %d %d %d %d \n", p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7]); // 1차원으로 접근시 => OK

        printf("%d %d %d %d \n", p[0][0], p[0][1], p[0][2], p[0][3]);   // 2차원으로 접근시 => 에러

        printf("%d %d %d %d \n", p[1][0], p[1][1], p[1][2], p[1][3]);   // 2차원으로 접근시 => 에러

}

  

subscripted value is neither array nor pointer nor vector

   

   

Visual Studio에서의 Error

error C21009: 첨자는 배열 또는 포인터 형식을 사용해야 합니다.

   

   

Error수정후 출력결과

void func(int (*p)[4]){ // 2차원 포인터 배열

   

        printf("%d %d %d %d \n", p[0][0], p[0][1], p[0][2], p[0][3]);   // 2차원으로 접근시 => OK

        printf("%d %d %d %d \n", p[1][0], p[1][1], p[1][2], p[1][3]);   // 2차원으로 접근시 => OK

}

  

   

반응형