&buf_one[0] == buf_two+0

https://www.onlinegdb.com/online_c_compiler#

 

Online C Compiler - online editor

OnlineGDB is online IDE with c compiler. Quick and easy way to compile c program online. It supports gcc compiler for c.

www.onlinegdb.com

 

온라인 C 컴파일러로 아래 코드를 실행해보면,

#include <stdio.h>
#include <stdint.h> // uint8_t

int main()
{
    // uint8_t 는 8비트 (1바이트) 이므로,
    // 연속된 배열 공간에서는
    // 주소가 1씩 증가함
    
    uint8_t buf_one[100];
    buf_one[0] = 1;
    buf_one[1] = 2;
    buf_one[2] = 4;
    
    printf("&buf_one[0] : %u\n", &buf_one[0]);
    printf("&buf_one[1] : %u\n", &buf_one[1]);
    printf("&buf_one[2] : %u\n", &buf_one[2]);
    
    char* buf_two = buf_one;
    printf("buf_two[0] : %d\n", buf_two[0]);
    printf("buf_two[1] : %d\n", buf_two[1]);
    printf("buf_two[2] : %d\n", buf_two[2]);
    
    printf("buf_two+0 : %u\n", buf_two+0);
    printf("buf_two+1 : %u\n", buf_two+1);
    printf("buf_two+2 : %u\n", buf_two+2);
    
    return 0;
}

 

아래와 같이 출력된다.

&buf_one[0] : 292731376
&buf_one[1] : 292731377
&buf_one[2] : 292731378
buf_two[0] : 1
buf_two[1] : 2
buf_two[2] : 4
buf_two+0 : 292731376
buf_two+1 : 292731377
buf_two+2 : 292731378

 

buf_two 가 가리키고 있는 것은

buf_one 배열의 0번째 index의 주소이다.

 

&buf_one[0] 와 buf_two+0 가

같은 주소값으로 출력된 것을 확인할 수 있다.

 

&buf_one[0] == buf_two+0

 

*buf_two = buf_one 이므로,

양변에 & 연산자를 취해주면

&(*buf_two) = &(buf_one)

 

&*가 이 순서대로 나오면 두 연산자 모두 사라지므로

buf_two = &buf_one 이라고 할 수 있다.

 

&buf_one[0] == buf_two+0  == &buf_one + 0

 

따라서

&buf_one[0] == buf_two+0

+ Recent posts