본문 바로가기
C/기말고사 대비(2022 1학기)

22/05/09 포인터 스터디 정리

by Meaning_ 2022. 5. 9.
728x90
반응형

제일 중요한거

arr=&arr[0]
&arr+i=&arr[i]
*(arr+i)= arr[i]  사실상 *(&arr[0]+i)라 봐도 무방함

 

1번

 

1
2
3
int arr[3]={1,2,3};
int *ptr=arr;
 
cs

이때 arr==ptr은 성립하지 않는다

그러나 

arr=&arr[0]이고 ptr=&arr[0]인건 맞음

arr==ptr인것은 배열 포인터에서만!

 

2번,3번

 

int *ptr=arr;

*ptr+=2; --> *(&arr[0])+=2 즉 arr[0]의 값에 2를 더하겠다는것

ptr++; --> ptr+1 == &arr[0]+1==&arr[1] 그래서 ptr은 arr[1]을 가리킨다.

*(ptr+i) == *(&arr[0]+i)==*(arr+i)==arr[i]

 

4번

출력값을 생각해보자.

 

1번) &arr --> 2차원 배열의 주소값이므로 대표값인 arr[0][0]

또는 &arr=&arr[0] 근데 arr[0]은 배열이므로 

arr[0]의 주소값이라는 것은 arr[0] 배열의 대표값이기에 &arr[0][0]

(배열의 주소값== 배열의 대표값== 배열의 맨 앞의 값)

 

2번) arr --> arr=&arr[0]=&arr[0][0] (1번과 같은 이유)

arr=&arr[0] 배열 그자체 = 배열의 주소값= 배열의 가장 첫번째 값(대표값)

arr[0]=&arr[0][0] 

arr[0]도 배열이고 arr[0]은 arr[0][0]의 주소값을 가리킴 (배열의 가장 첫번째 대표값)

 

문제에서 arr=&arr[0] --> arr[0]배열의 주소값, 즉 대표값인 첫번째값  arr[0][0]의 주소값을 가리킴

 

3번) *arr --> *(&arr[0]) =arr[0] arr[0]은 배열이기에 

arr[0]을 ARR이라고 치환하면 ARR=&ARR[0]

ARR은 arr[0]이니까 사실상 &ARR[0]==&arr[0][0]

 

그니까 *arr도 &arr[0][0]

또는 arr[0]은 배열이니까 이거의 대표값이 주소값이 될것임 arr[0]==&arr[0][0]

 

4번) &arr[0] =arr==&arr[0][0]

또는 arr[0]배열의 주소값은 arr[0]배열의 대표값인 arr[0][0]을 의미

5번 ) arr[0] 은 arr[0]배열의 주소값과 같고 이는 arr[0]의 대표값인 &arr[0][0]

6번) *arr[0] 은 arr[0]이 arr의 0번째행 배열! 이므로 arr[0]은 대표값인 arr[0][0]의 주소값이고

 

*(&arr[0][0]) ==arr[0][0] 즉 0 이다.

7번) &arr[0][0] arr[0][0]의 주소값 그자체

8번) arr[0][0]이므로 0 

 

4-1

1
2
3
4
5
6
7
8
9
10
int main() {
    int arr[5][5= { 5,4,3,2,1 };
    if (*arr == arr[0]) { printf("ok"); }//ok
    if (*arr == arr[0]) { printf("ok"); } //ok
    if (*arr == &arr[0][0]) { printf("ok"); } //ok
    
    cout << (*arr == arr[0]) << endl;
    cout << arr[0];
    
}
cs

 

첫번째 if

*arr은 *(&arr[0]) ==arr[0] 

앞과 뒤가 같기에 ok출력

(무조건 arr=&arr[0]만 생각!)

 

++) arr[0]==&arr[0][0]

 

세번째 if

*arr=*(&arr[0])==arr[0]

 

arr[0]==&arr[0][0]

arr[0]은 arr[0]배열의 주소값을 가리키고 그건 첫번째 값 

 

 

728x90
반응형

댓글