보통 사용법이
p = &a;
*p = a;
이런 식이라는데
첫 번째는 a의 주소값을 p에 저장시키니 가리키게 되는거고
두번째는 a의 값을 p가 가리키게 하는거잖아요.
근데 함수에 값을 넘길 때는 왜 함수에도 &로 넘기고
함수에서 받을 때도 *로 받는건가요.
예를들어
메인에서 함수1() 이란걸 하나 쓴다면
함수1(&a) 이렇게 써야하고
함수1 작성할 때도 함수1(int *a) 이런 식으로 받아오니 요게 좀 이해가 안 가네요.
보통 사용법이
p = &a;
*p = a;
이런 식이라는데
첫 번째는 a의 주소값을 p에 저장시키니 가리키게 되는거고
두번째는 a의 값을 p가 가리키게 하는거잖아요.
근데 함수에 값을 넘길 때는 왜 함수에도 &로 넘기고
함수에서 받을 때도 *로 받는건가요.
예를들어
메인에서 함수1() 이란걸 하나 쓴다면
함수1(&a) 이렇게 써야하고
함수1 작성할 때도 함수1(int *a) 이런 식으로 받아오니 요게 좀 이해가 안 가네요.
함수1은 포인터로 받으니까 p10 이 포인터변수면 함수1(p10); 이러면 OK
그런데 a는 포인터 변수가아니죠... 그래서 앞에 &를 붇여서 a의 주소를 얻어서 포인터를 넘겨줍니다
함수1(a); <-- a가 포인터변수라면
함수1(&a); <-- a가 포인터 변수가아니니까 &를 붇여서 주소를 얻어낸다
하지만 처음 말한대로 *p로 포인터 변수를 선언했다면 그걸 연결시키기 위해서는 그냥 값을 넘겨주면 되는게 아닌가요. 함수1(int *) 이렇게 선언하고 메인에서 쓸 때 함수1(&a) 이렇게 쓴다면 결과적으로 *a = &a가 되는 효과가 아닌지...
그러나 함수에 넘겨준다고 그냥 함수1(a) 이렇게 하면 int와 int *는 매치가 안된다며 에러가 뜨고..
함수1(&a); 와 함수1(p); 는 같은표현입니다 어느쪽을써도되죠 p가 a의 주소를 가르키고있다면
int와 int *는 매치가 안된다며 에러가 뜨고.. <- 함수를 포인터로 선언했으니 포인터를넣어줘야 되는것이 당연합니다
a는 포인터가 아니지요
함수 인자값을 포인터로 했으면 주소값 &a나 포인터p로 전달해야함
함수1(int *a) 이렇게 선언하고 메인에서 쓸 때 함수1(&a) 이렇게 쓴다면 결과적으로 *a = &a가 되는 효과가 아닌지.. => 함수에서 포인터a를 선언했으니 a(함수내의a)=&a(main함수내의a) 가맞음
int b; int*a=&b; == int*a; int b; a=&b;