dev, tech/c, c++18 함수에서 인자를 넘기는 방식 방식의 결정 - 함수를 호출하는 측에서 제공한 인자가 함수로 넘어간 뒤에 그것이 변경될 경우 그 변경의 결과가 함수 호출쪽으로 반영이 되느냐에 따라 결정된다. - C에서의 함수 호출 방식은 '값에 의한 호출' 방식이다. : 함수 내에서 인자에 변형을 가하더라도 호출측의 인자에는 값의 변동이 없다. 인자들을 그래도 함수측으로 똑같이 값을 복하사여 사용한다. 즉, 원본은 놔두고 복사본을 변경하기 때문에 원본은 그대로 보존이 된다. - C에서는 포인터를 이용하여 참조에 의한 호출을 흉내낼 수 있다. 2006. 4. 6. 포인터 #5 (함수포인터) 함수 포인터 - 코드를 가리키는 포인터 예) int sigma(int n){ int r; for(r=0;n>0;n--) r+=n; return r;} 위와 같은 sigma()함수를 가리키는 포인터는 다음과 같이 정의될 수 있다. int (*fptr)(int); 가리킬 함수의 리턴 값의 형과 인자리스트에서 이름을 뺀 데이터형만을 나열한 뒤에 포인터의 이름 앞에 *를 붙이고 괄호를 씌우면 된다. 그러면, fptr에 주소를 대입하려면 어떻게 하여야 할까? fptr은 데이터를 가리키는 포인터가 아니라, 코드를 가리키는 주소이기 때문에 어떤 함수의 시작 주소를 fptr이 가리켜야 한다. ( - 어떤 함수의 시작 주소는 함수명 그 자체이다.) fptr = sigma; /* sigma() 와 같이 쓰면 안됨 */ 이.. 2006. 4. 6. 포인터 #4 (void 포인터) void 포인터 - 포인터의 두 가지 요소 중, 둘째 요소인 가리키는 데이터형이 정해지지 않은 포인터를 의미한다. void포인터의 정의는 가리키는 데이터형이 없으므로 데이터형 자리에 void라는 예약어룰 기술한다. 예) void *vptr; - 특징 : 1. 역참조 연산자(* : 포인터가 가리키는 곳의 내용을 읽어냄)를 사용하지 못한다는 것이다. (참조하려면 가리키는 데이터형을 알아야 적절하게 해석을 한다.) 하지만, 형변환 연산자 (casting operator)를 이용하여 다른 형의 포인터로 강제 형변환을 하면 참조가 가능하다. 예) int i; i = *vptr; // 잘못된 표현 . vptr은 형이 정해지지 않았기 때문이다. i = *(int*)vptr; // vptr 을 (int *)연산을 이용.. 2006. 4. 6. 포인터 #3 ( 포인터의 포인터 ) 포인터의 포인터 - 포인터 변수를 가리키는 포인터를 말한다. 즉, 내용으로써 포인터를 가리키는 변수의 주소를 가진다는 것이다. 예를 들어 살펴 보도록 한다. C에서는 다른 언어와는 달리 문자열이라는 데이터형이 없다. 대신 C에서는 char 형의 포인터로 문자열을 나타낸다. char str1[] = "This is string"; char *str2 = "This also is string"; 위의 st1은 배열의 형식으로 str2는 포인터 형식으로 문자열을 나타냈지만 두 형식은 비슷한 의미를 지니고 있다. 다른점이 있다면 str1은 배열의 이름이기 때문에 자체의 주소를 저장하기 위한 공간을 갖지 않는 상수라는 것이며, str2는 포인터이기 때문에 주소를 저장하기 위한 공간을 할당받는다. 그러므로, 내용인.. 2006. 4. 6. 이전 1 2 3 4 5 다음