집 >백엔드 개발 >C#.Net 튜토리얼 >*p++와 (*p)++의 차이점은 무엇입니까
"*p++"와 "(*p)++"의 차이점은 다음과 같습니다. 1. "*p++"는 p가 가리키는 단위의 값을 나타내고, p는 다음 단위를 가리킵니다. 즉, p가 증가합니다. 1. "*p++"는 다음 주소를 나타냅니다. 2. "(*p)++"는 *p가 가리키는 데이터의 값에 1을 더하는 것을 의미합니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, C++17 버전, Dell G3 컴퓨터.
차이:
1. *p++는 p가 가리키는 단위의 값을 나타내고, p는 다음 단위를 가리킨다. 즉, p는 1씩 증가한다. *p++는 다음 주소를 나타냅니다.
2. (*p)++는 *p가 가리키는 데이터의 값에 1을 더하는 것을 의미합니다.
C 컴파일러는 *와 ++를 동일한 우선순위의 연산자로 간주하고 오른쪽에서 왼쪽으로 결합하므로 *p++의 ++는 p에만 작동하고 *(p++)와 동일한 의미를 갖습니다. ( *p)++에서는 ()가 * 및 ++보다 우선순위가 높으므로 ++는 () 내의 *p 표현식에 따라 작동합니다.
예:
int x,y,a[]={1,2,3,4,5},*p=a,*q=a;
x=*p++;//이 문장을 실행합니다. 이후 x=a[0]=1, p=a+1
y=(*q)++;//이 문장을 실행한 후, y=a[0]+1=2, q still=a
추가 정보:
검증 프로그램 1
#include"stdio.h" void main() { int a=2; int*p=&a; int*pold;//记录P指向的地址,为了作为比较使用 pold=p; //-----------原来的信息 printf("原来的a=%d",a); printf("原来的p=%x",p); printf("原来的pold=%x",pold); //----------进行变化 printf("*p++的结果=%d,a的结果a=%d",*p++,a); printf("地址变化的结果p-pold=%x",p-pold); }
프로그램 2
#include"stdio.h" void main() { int a=2,*p=&a,*q=&a; printf("%d%d",(*p),a); printf("%d%d%d%d",(*p)++,*p++,*q++,a); printf("%d",a); }
프로그램 3:
#include"stdio.h" void main() { int a=2,*p=&a,*q=&a; printf("%d%d",(*p),a); printf("%d%d%d",*p++,(*p)++,*q++); p=&a;q=&a; printf("%d%d%d%d",a,*p,(*q)++,a); printf("%d%d%d%d",a,++(*p),++(*q),a); printf("%d",a); }
요약:
*p++는 먼저 *p의 값을 빼낸 다음 p++
(* p) ++는 *p의 값을 먼저 빼는 것이고, 이 값을 ++
*(P++)는 *p의 값을 먼저 빼는 것이고, p++
그래서 *p++는 *(와 동일합니다. P++)
그리고 printf의 연산 순서는 오른쪽에서 왼쪽으로 진행됩니다. 또한, 전체 연산식이 계산된 후 right++가 실행되며, right++의 실행 순서는 왼쪽에서 오른쪽입니다. left++는 변수를 발견하면 즉시 변수 값을 증가시킵니다.
printf
#include"stdio.h" void main() { int a=2; printf("a++=%d,++a=%d,a++=%d",a++,++a,a++); printf("a=%d",a); }
의 작업 순서를 확인하세요. 권장 튜토리얼: "C#"
위 내용은 *p++와 (*p)++의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!