프로그래밍 언어/C언어

C언어 배열의 변수명에 &를 붙이면?

원원 2020. 5. 14. 22:43


안녕하세요 오늘은 C언어 배열에 대해 알아보겠습니다





배열선언이 하나 있습니다

int test[1]={1};



test의 값은 0x00이고 test의 주소값(&test)도 0x00이고 test[0]의 주소값도 0x00입니다

그러나 두개는 같고 한개는 의미하는 바가 다릅니다



1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
 
int main()
{
    int test[1]={1};
 
    
    printf("%d \n" , test) ;
    printf("%d \n" , &test) ;
    printf("%d \n" , &test[0]) ;
}



출력창에는 3가지 값이 같게 나와있습니다.





출력한3개는 일단 주소값이니까 *를 붙이면 1이 나와야합니다

Colored By Color Scripter

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
 
int main()
{
    int test[1]={1};
 
    
    printf("%d \n" , *test) ;
    printf("%d \n" , *&test) ;
    printf("%d \n" , *&test[0]) ;
}



출력창 두번째줄에는 여전히 주소값으로 나와있습니다

앞에 *를 또 붙여줘야지 1이 나오게 됩니다

printf("%d \n" , **&test) ;





결론적으로

test와 &test[0]이 가리키는 값은 1이고, &test가 가리키는건 test(&test[0])가 됩니다







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
 
int main()
{
    int test[1]={1};
    int test2[2]={1};
    
    
    printf("%d \n" , &test) ;
    printf("%d \n" , &test+1) ;
    printf("%d \n" , &test+2) ;
    printf("----------------\n") ;
    printf("%d \n" , &test2) ;
    printf("%d \n" , &test2+1) ;
    printf("%d \n" , &test2+2) ;
}




test배열의 자료형은 int[1]이여서 4바이트입니다

그래서 test배열의 주소값에 +1씩 해주면 4바이트씩 늘어나는게 보입니다


test2배열의 자료형은 int[2]이여서 8바이트입니다

그래서 test2배열의 주소값에 +1씩 해주면 8바이트씩 늘어나는게 보입니다