포인터 4

[C언어] 함수이름도 포인터?

혹시 함수도 주소값을 갖고 있다는거 아시나요? 그럼 함수의 자료형만 안다면 함수역시 포인터가 되는거 아닐까요? 그렇습니다 함수역시 주소값을 갖고 있고 자료형또한 갖고 있습니다. 그럼 주소는 어떻게 되고 자료형은 무엇을 갖는지 그 자료형을 어떻게 알아 내는지 를 알아보죠 간단히 함수의 포인터 타입을 알아보자는겁니다. void show(int a){ printf("%d \n",a); } 위와같은 함수가 있습니다 간단히 int형 변수를 매개변수로 받아 출력을 하는 show합수지요 함수의 자료형을 얻기 위해서 우린 함수의 리턴타입과 매개변수타입이 무엇인지를 알아야 합니다. 위의 show 함수의 리턴타입은 void형 이고 매개변수는 int형이되겠지요.. 그럼 show의 포인터 를 만들이렇게 됩니다. void(*s..

。공부 。 2008.01.27

[C언어] 2차원 배열의 포인터 타입

1차원 배열의 포인터 타입을 결정할때 우리는 포인터의 자료형과 포인터 연산시 증가하는 바이트 크기가 같다 는것을 알고 있다. 그럼 2차원 배열은 어떨까? 1차원 배열과 같을까? 이렇게 같으면 얼마나 좋으련만.. 그렇지가 않다. 포인터의 자료형은 1차원배열과 마찬가지로 포인터가 가르키는 자료형과 일치하지만 포인터 연산시 증가하는 바이트의 크기가 틀리다. 같은 int형 배열이더라도 증가하는 값은 4byte로 동일한것이아니라 그때 그때 틀리다는 것이다. 예를 들어 보자. int arr[3][2] = {1,2,3,4,5,6}; 위와같이 3*2배열이 있다. 자료형은 당연히 int형일테지만 포인터 연산시 증가하는 값은 몇byte일까? 확인하는 간단한 방법은 주소값을 출력하면 되겠죠 printf("arr[0] : %..

。공부 。 2008.01.23

[C언어] 배열이름도 포인터?

배열이란 둘이상의 변수를 동시에 선언하거나 많은 양의 데이터를 일괄적으로 처리할때 주로 쓰인다. 하지만 우린 배열이또다른 의미를 갖고 있다는것을 알면서도 대충알고만 넘어가는 경우가 많다. 배열을 또다른 말로 풀이하면 상수포인터라고 말할수있습니다. 그이유를 알아보자. int array[5] = {0,1,2,3,4}; 다음과 같은 배열이 있고 배열 array의 첫번째 요소의 주소값이 0x1000번지에 할당되었다고 가정하자. 그럼 두번째 요소인 array[1]은 int형 배열이기 때문에 4byte를 건너뛴 0x004번에 할당될것이다. 만 double형이였다면 8byte씩 건너뛰어서 할당이 되겠지요.. 아래와같이 배열요소의 결과값을 출력하면 결과값은 당연히 0과 1이 나오겠죠? printf("array[0] :..

。공부 。 2008.01.17

<C++> 포인터 '*'와'&'의 의미

포인터를 사용하기 위해서 우리는 두가지 연산자를 사용한다. '*'와'&'가 그 두개다. '*'는 포인터 변수를 선언할때도 쓰이지만 또다른 용도로도 사용한다. - '&'의 쓰임 주소값 반환 - int temp = 10; int* pt1 = &temp; printf("temp 의 주소값 : %d",&temp); printf("pt1 의 값 : %d",pt1); '&'는 주소값을 반환하는 용도로 쓰인다. temp는 변수선언과 동시에 메모리상에 올라가게 되고 그와같이 주소값도 갖게 되는것이다. 예를 들어 temp의 주소값이 0x10이라면 int* pt1 = &temp; 이와같이 코드를 입력하면 temp의 주소값을 포인터pt1에 넣으라는 명령이 된다. 위의 코드에서 3,4번째 라인에 있는 결과값은 0x10되고 두..

。공부 。 2008.01.05