c와 php에서 포인터는 비슷하다.
하지만 가끔 헷갈리는 경우가 있는데..
조심해야되는 경우가 있다.
c처럼 생각하고 포인터를 썼다가는 큰일이 날지도 모른다는 생각에 정리해둔다.
(고수들은 이미 다 알고 있는 사실일지도 모르지만 -ㅅ- 나같이 삽질하는 초보들을 위해 정리한다)
int *p; int a; a = 10; p = &a; *p = 5;
을 php코드로 짜면 다음과 같이 될 것이다.
$a = 10; $p = &$a; $p = 5;
하지만 다음은 어떨까?
int *p; int *p2; int a; a = 10; p = &a; p2 = p; *p2 = 5;
c에서는 a가 5로 바뀐다.
php에서는..
$a = 10; $p = &$a; $p2 = $p; $p2 = 5;
라고 하면?
c로 따지면 $p는 int*이지만, $p2는 int가 된다.
즉, $p2 = $p 하는 순간 p2 = *p; 와같은 식이 되어버리고 만다는것.
이걸을 방지하기 위해 $p2가 포인터 변수라는것을 알려주기 위해 다음과 같이 바꾼다.
$a = 10; $p = &$a; $p2 = &$p; $p2 = 5;
$p앞에 &를 붙이면 $p2가 포인터 변수라는것을 알려주기 때문에 원하는 결과를 얻을 수 있다.
함수의 경우, 인자를 보내는쪽(?)이나 받는쪽에서 &를 붙이게 되면 자연스럽게 둘중 하나가 포인터 같이 사용될 수 있다.
예를들어
$a = 2;
myf(&$a);
function myf($b)
{
$b = 10;
}
와 같은 코드가 있다면 $a의 값이 10으로 바뀐다. 반대로
$a = 2;
myf($a);
function myf(&$b)
{
$b = 10;
}
라고 해도 마찬가지의 결과를 얻을 수 있다. 물론 둘다 &라고 해도 정상적으로 된다.
Posted by 장현준


