안녕하세요 오늘은 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이 나와야합니다
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바이트씩 늘어나는게 보입니다
'프로그래밍 언어 > C언어' 카테고리의 다른 글
C언어 2차원 배열이란 (0) | 2020.07.06 |
---|---|
C언어 포인터에 관해서 (0) | 2020.06.13 |
C언어 특정비트 1로 만들기 (0) | 2020.02.25 |
함수 선언할 때 매개변수에 *넣는거와 안넣는거 차이점. (0) | 2020.01.06 |
#define와 #와 ##의 관계 (0) | 2019.07.06 |