-
함수의 포인터 표현 + 포인터와 배열의 차이점C, C++ 2018. 12. 20. 10:37
문자열은 기본적으로 주소이다!
배열 : 배열명은 주소상수
함수: 함수명은 주소상수
Char str[] = “christmas” ;
이경우 크리스마스는 stack에들어가고
Str[0]= ‘C’; 를 하면 변경이 가능하다.
“christmas”[0] 표현도 가능, []배열 표시 앞에는 주소가 오면됨…
배열의 포인터표현을 하는 경우..
Char* ptr = “Christmas;”의 경우에는 배열과 다르게 수정은 되지 않음
RO(read Only) 영역에 올라가 있는 값을 포인터로 가르키기 때문에 수정불가
#include <stdio.h>
int plus(int a, int b){
return a+b;
}
int minus(int a, int b){
return a-b;
}
int main(){
printf("%d\n", plus(10,20));
printf("%u\n", plus); //함수는 RO영역에 올라가기 때문에 주소값이 찍혀나옴
// 컴퓨터 공간에서 코드 등 RO영역이 젤 상단, 그 아래는 heap, 제일 아래는 stack 으로 stack 부터 값을 채워서 사용
int (*ptr) (int,int) = plus;
//(리턴타입or void)(포인터)(매개변수 타입) = 함수명;
// 이 포인터 변수는 리턴타입과 매개변수가 동일한 함수의 경우에는 모두 받을 수 있음
// 이렇게 선언하고 나면 ptr을 함수처럼 사용하는 것이 가능하다
printf("%u, %u\n", plus, ptr);
printf("%d\n", ptr(20,10));
ptr = minus;
printf("%d\n", ptr(20,10));
return 0;
}
#include <stdio.h>int plus(int a, int b){return a+b;}int minus(int a, int b){return a-b;}int mul (int a, int b){return a*b;}int mod(int a, int b){return a%b;}/*매개변수 3개 - 함수포인터 변수, int 2개 */int delegate(int(*ptr)(int, int), int a, int b){return ptr(a,b); // ptr이 가리키는 함수가 무엇인지에 따라서 결과값이 다르게 나옴}int main(){printf("%d\n",delegate(plus,10,20));printf("%d\n",delegate(minus,10,20));printf("%d\n",delegate(mod,10,20));printf("%d\n",delegate(mul,10,20));//기능을 추가하고 기능을 사용하는 것이 쉽고, 사용자들이 사용하기에 직관적이다.//함수명이 일종의 키워드처럼 작동되고 여러개의 함수를 사용하는 것이 자연스러워짐//자바스크립트에서도 함수를 호출하거나 매개변수로 받거나...함수를 던지고 받는것이 가능하지만//c에서는 포인터를 이용하여 가리키는 것이고 자바스크립트에서는 함수가 직접 날아다닌다(?)라는 개념- 메모리'C, C++' 카테고리의 다른 글
헤더와 메소드 분리하기, 메소드 포인터 이용하기 (0) 2018.12.27 void 포인터 (0) 2018.12.21 포인터 연산과 배열 표현(심화 연습편) (0) 2018.12.19 String 함수의 사용, 선택정렬- 버블정렬 (0) 2018.12.18 2차원 배열 (0) 2018.12.14