함수의 포인터 표현 + 포인터와 배열의 차이점
문자열은 기본적으로 주소이다!
배열 : 배열명은 주소상수
함수: 함수명은 주소상수
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;
}