2017-12-12 11 views
1

나는 재귀 운동을했고, 나는 값이 *p+=1 작품과 *p++에 있지만 어떤 이유로 지적에 둘 다 1을 추가해야 *p++ 또는 *p+=1.포인터 산술

을하고의 차이는하지 않습니다 무엇인지 이해할 수 없었다 .

void rec(char a[], int *p ,int i) 
{ 
    if(a[i+1]== '\0') 
     return; 

    if(a[i]==a[i+1]) 
     *p+=1; 

    rec(a, p, i+1); 
} 


void rec(char a[], int *p ,int i) 
{ 
    if(a[i+1]== '\0') 
     return; 

    if(a[i]==a[i+1]) 
     *p++; 

    rec(a, p, i+1); 
} 
+1

[참조 된 포인터에서 후행 증가분] 가능한 복제본 (https://stackoverflow.com/questions/859770/post-increment-on-a-dereferenced-pointer) –

답변

1

*p += 1; 수단 포인터 역 참조 p 한 다음 1 의해 간접 참조 값을 증가. *p++;

*p; 
p += 1; // Increment the pointer itself 

수단 동안 컴파일러 *(p++);로 파싱 있도록 ++* 연산자보다 우선 순위가 높기 때문이다.

(*p)++*p += 1;과 같습니다.

+0

그리고'* p + = 1' '(* p) + = 1'을 의미합니다. – goodvibration

1

우선 현명 여기 *p+=1

++ > * > += 

p 의해 지시되는 값이 증가된다. 여기에서 p이 가리키는 메모리 위치의 값이 증가합니다. 코드에서 변경 사항을 볼 수 있습니다.

두 번째 경우에는 *p++ 포인터가 단지 p으로 증가하고 그 값을 참조 해제하지만 그 r 값을 아무 곳에도 지정하지 않습니다. 이것은 p이 가리키는 메모리에있는 실제 내용을 변경하지 않습니다.

그런 이유로 두 번째 경우에는 작업 변수에 변경 사항이 표시되지 않고 실제로 작동하지 않는다고 결론지었습니다.