아하 로고
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
목마른천산갑237
목마른천산갑23721.03.20

포인터에대해 설명해주세요 배열과의 관련성도요

포인터에 대해 쉽게 설명해주세요

배열이랑 함께 사용할때 써야할 자료형이 헷갈려요

함수로 호출할때의 자료형이랑 그냥 호출할때 자료형이랑 뭐가 다르나요?

포인터를 어떻게 하면 잘 하게 될수 있을까요?

55글자 더 채워주세요.
답변의 개수3개의 답변이 있어요!
  • 현재 학원에서 c, python,java,iot,jsp등 을 가르치고 있는 강사입니다.

    모든 변수는 메모리에서 실행될때 일정한 크기를 가지게 되고 또한 메모리의 주소를 가지게 됩니다.

    포인터는 메모리에 저장된 데이터의 주소를 가리키는 것을 포인터라고 합니다.

    이 포인터를 변수에 저장하여 주소값을 가지고 있는 변수를 포인터변수라고 합니다.

    그럼 왜 주소를 포인터변수에 저장할까요?

    바로 포인터를 이용하여 변수에 접근하여 값을 넣고 꺼내기 위해서 입니다.

    내가 특정한 주소에 접근하려면 포인터의 연산을 하여야 하는데

    예를 들면 p, p+1, p+2, ,,,, 이나 p++, p-- 등과 같이 이루어 집니다.

    즉 포인터가 가리키는 곳의 이동이 포인터의 연산입니다.

    그러면 포인터 변수를 선언할때 의 포인터 변수의 형은 어떻게 정해야 할까요.

    바로 포인터의 연산을 바르게 하기위새서 정해야 합니다.

    예를 들면

    int arr[3] = {10,20,30}; //정수형 3개를 저장한 배열

    int *p = arr; //arr은 배열의 이름이므로 주소임

    여기서 p는 첫번째 데이터 10의 주소를 가리키고 있고

    내가 p+1을 하면 20의 주소를 가져오고 싶다고 생각해 봅시다.

    만약 arr의 주소가 100번지라고 가정하면 p도 100번지가 저장되어 있겠죠?

    그럼 p+1을 하면 104번지를 의미합니다. 왜 그럴까요?

    바로 포인터 변수 p의 형이 int이기 때문에 p+1은 int 의 크기 (4byte)만큼 이동됩니다.

    즉 포인터의 형은 내가 p+1과 같이 포인터의 연산을 할때 몇byte씩 건너뛸지를 결정하는 역활을 합니다.

    char *p = arr; 를 한다고 해서 에러가 나지는 않습니다..\

    다만 char의 포인터변수이기 때문에 p+1 은 101 번지를 의미하게 되겠지요 \

    그림으로 메모리 구조를 그려가면 설명해야 하는데 글로만 설명하려니 잘 전달이 됬는지 모르겠네요.

    열공하시기 바랍니다.^^


  • 포인터는 주소값이라고 보시면 됩니다.

    내가 어떤 변수나 구조체를 사용해야 하는데, 물리적으로 메모리의 어디에 올라가 있는지를 알면 더 빠르고 리소스를 잡아먹지 않으면서 해당 객체에 접근을 할 수 있겠죠?

    이런 개념으로 이해하시면 됩니다. 사람이 일일히 이 주소값을 컨트롤 하기가 힘드니 포인터로 지정을 해주는거죠.


  • c언어 포인터란

    메모리의 주소를 가지는 변수입니다.

    즉 데이터가 아닌 주소값을 가지기 때문에

    변수의 값이 바뀌어도 변화된 값을 표현합니다.

    이는 c언어의 가장 큰 특징이며

    메모리에 접근이 가능하게 만듭니다.

    메모리 접근을 통해 얻는 강력함은

    장점이기도 하지만 잘못된 오류를

    만들어내는 단점으로 작용하기도 합니다.

    수행문을 하나하나 뜯어보면 아무런 오류가 없는데

    결과 값이 전혀 다르게 나올수 있기 때문입니다.

    이 단점을 크게 본 자바와 같은 언어에서는

    아예 제외 시켜버린 기능이다