。공부 。 70

[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[3] = {1,2,3,}; int형 데이터 3개를 저장할수있는 배열 array를 선언하고 요소를 1,2,3초기화 해줍니다. int* pp = array; //배열이름은 배열의 첫번째 요소의 주소를 값으로 갖는다. int형 포인터변수 pp에 배열 array의 주소값으로 초기화 즉 array의 첫번째 요소의 주소로..

。공부 。 2008.01.18

[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

<PHP> ENCTYPE="multipart/form-data" 의미

[ ENCTYPE="multipart/form-data" ] 위와 같은 코드를 php 에서 업로드할때 폼 양식에서 볼수 있다 다들 위와 같은 코드를 아무 생각없이 그냥 파일 업로드하는거니까 써줘야 하는거야 이렇게알고 있는 사람들이 많다. 데이터를 전송하는 방식에는 GET방식과 POST방식이 있고 또하나 ENCTYPE속성의 "multipart/form-data" 이다. GET방식은 URL에 폼데이터가 노출되기때문에 입력내용의 길이제한이있고 256byte~4096byte 까지의 데이터를 전송할 수 있다. POST방식은 URL에 노출되지않고 데이터를 전송하기 때문에 입력내용의 길이에 제한을 받지 않는다. 이렇게 데이터를 전송하는데 아무문제없을것처럼 보이니지만 이둘은 보낼수있는 데이터양의 한계가 있다 파일이나 ..

。공부 。 2007.12.13

<C++> Static 의 특징

static은 전역변수와 전역함수를 대체하기위해서 등장했다. static을 간단히 설명하면 static으로 선언한 변수와 함수는 공유할수 있다는것이다. [ STATIC 의 특징 ] - 클래스 변수, 클래스 함수라한다. - main 함수 호출이전에 메모리 공간에 할당되서 초기화(전역변수와 동일) - 선언된 클래스의 객체내에 직접 접근 허용 - static 멤버 초기화 문으로 초기화 해야한다. - static를 적용한 예 - class Student{ int num; static int count; public: Student(int _num){ num = _num; cout

。공부 。 2007.12.09

<C++> Const & Initializer(이니셜라이져)

Const는 변수를 상수화 하고 Initializer(이니셜라이저)는 Const로 상수화된 변수를 초기화할때 쓰인다. [ Const의 의미 ] - const aa = 10; aa변수앞에 const를 붙여주면 aa변수는 10이라는 하나의 상수가 되는것이다. 이때 상수화된 변수 aa를 aa = 50; 이렇게 쓰면 에러가 발생하게 된다 컴파일러는 소스를 해석할때 변수aa = 50 이 아니라 10 = 50 으로 해석하기 때문이다. 상수 10에 50을 넣을수는 없는일 아닌가? [ 포인터를 상수화 ] - const int* n = age; 데이터상수화라고 한다. 포인터(*n)로 접근해서 데이터의 값을 변경할수없다. 하지만 포인터n이 가리키고있는 변수age는 변경할수있다. *n = 20; // (X) age = 10..

。공부 。 2007.12.07