2017년 10월 21일 토요일

[포인터] *p++,*(p)++, ++*p,*++p | &*&i, &&*i, *&&i

#include <stdio.h>

int main(){
  int i=100;
  int j= 200;
  int* p;
  int *q;
  p = &i;
  q = &j;
  //p = &*&i; //이건 됨. int 변수의 주소 -> 포인트해서 다시 그 변수 -> 다시 int 변수의 주소
  //p = &&*i; //이건 안됨. 포인터가 아닌거에 * 를 붙이는것임
  // p = *&&i; //int 변수의 주소 -> 주소의 주소(오류) -> 포인트 해도 어딘지 모름
  // i = (int)p - (int)q;//p 와 q 가 정의되어있으면 정수형으로 캐스팅해서 주소 차이만큼 i 에 저장됨
  //i = (int)p;//p 가 어떤 변수를 포인트 하고 있으면 가리키고 있는 변수의 주소
  // q = &p;//p 포인터의 주소
  // *q = &j;//int 형에 int* 대입할려함. 오류
  // i =(*&)j;//괄호 우선 연산인데 괄호 안에 연산들을 적용할 변수가 없어서 오류
  // i=*&*&j; //j 의 값
  //*p++변수에 *p 값 넘겨주고 p가 포인트 하는 주소의 주소값 증가
  // (*p)++ 변수에 *p 값 넘겨주고 p가 포인트 하는 변수의 값이 +1
  //++*p == ++(*p) 변수에 p 가 포인트 하는 변수의 값에 +1 한 후 그 값은 넘김
  //*++p //p 가 포인트 하는 주소+1 하고 그 주소에 있는 값을 넘김
  return 0;
}

댓글 없음:

댓글 쓰기