프로그래밍

c언어 배열 크기 구하는 법

#include<stdio.h>

int ccc(int *arr);

int main()
{
    int arr[5] = { 1,2,3,4,5 };
    int r = sizeof(arr) / sizeof(arr[0]);


    printf("\nmain arr sizeof=%d\n  ", r);
    ccc(arr);

    return 0;
}

int ccc(int *arr)
{
    int r=0;

    r=sizeof(*arr) / sizeof(arr[0]);
    printf("\nvoid arr sizeof = %d  ", r);

    return r;
}

 

 

 

왜 main()과 int()는 방식이 다른건가요? 포인터라 그런건가요? 그럼 어떻게 하는게 좋죠

16개의 댓글

2020.04.02

C언어에서 배열 크기를 구하는 방법은 공식적으로는 없습니다

1
2020.04.02
@잉텔

그럼 어떻게 해요? c++은 있음?

0
2020.04.02
@클로로프렌

std::array 같은걸 제공은 하는데.. 글쎄...

0
2020.04.02

함수에 인자로 넘어갈 땐 포인터로써 넘어감

그래서 크기가 4(또는 8)이 나옴

그래서 함수에 사이즈도 같이 넘겨줘야함

0
2020.04.02
@번한강행

아... 방법없음? 그래서 책에서 사이즈 넘겼구나... 포인터 배열 크기 구하는 방식은 없을까요?

0
2020.04.02

int arr[5] 할때, arr은 이미 이 자체가 포인터임.

main에서 보면 sizeof(arr) / sizeof(arr[0]);으로 해놨던데

여기는 왜 이렇게 쓰고

 

ccc함수에는 왜 갑자기 sizeof(*arr) / sizeof(arr[0]);함

이렇게 하면, sizeof(arr[0]) / sizeof(arr[0]); 한 거랑 똑같은 거임..

그럼 결과가 1이 나오지..

 

그러므로

 

int ccc(int* arr)

{

return sizeof(arr) / sizeof(int);

}

 

하면 크기를 알려줄 거임

 

근데 이경우 위에서도 말했다시피 단순 포인터로만 넘어와서(배열포인터가 아닌)

사이즈가 그냥 int*의 사이즈만 알려주고 말거임

 

그래서 어떤 크기인지도 넘겨줘야함.

그런데 그러면 의미가 없지?

0
2020.04.02
@숨은음은

안되요 ㅠㅠ *arr 이 arr[0]이라고 배워서 안했음

 

그 *(arr+1)이 a[1]로 나오잖아요 아 안되는 거인 듯

0
2020.04.02
@클로로프렌

밑에 달아놨잖아..

저렇게 하면 단순 포인터라서

포인터 크기만 알려주고 말거라고 ㅠㅠ

그래서 사이즈를 넘겨줘야 하는데

그러면 굳이 사이즈를 왜구해 사이즈를 줬는데...

0
2020.04.02

https://ideone.com/vaOiP1

이런식으로 배열크기를 달고 다녀야됨

0
2020.04.02
@뱀고기

그냥 #define SIZE 이렇게 들고 다니는게 더 좋을까요? 이게 편하긴 편한데 ㄷㄷ

0
2020.04.02
@클로로프렌

한 프로그램에서 배열 여러개 쓰면 못함

0
2020.04.02
@뱀고기

for문으로 사이즈 하나 하나 누적 덧셈(sum)해서 구하는건 좀 그런가요?

 

반복문 쓰면 될 거 같은데 나중에 복잡해지면 느려질까봐 걱정 ....

0
2020.04.02
@클로로프렌

포인터만 가지고 메모리영역 끝이 어딘지를 앎?

0
2020.04.02
@뱀고기

아 그러네 이런

0
2020.04.02

 

메인함수에서는 배열 자체에 크기를 지정해줬고 이건 상수이기 때문에 컴파일타임에서 sizeof 연산의 결과를 계산해서 하드코딩으로 때려박기 때문에 결과가 제대로 나오는 것 처럼 보이는거고

 

매게변수에다가 암만 대괄호 넣고 배열이라고 선언해봤자 그건 프로그래머 보기 편하라고 만들어놓은 syntactic sugar일 뿐 컴퓨터가 봤을땐 똑같은 포인터이기 때문에 올바른 배열사이즈 계산은 불가능하다.

 

0
2020.04.02

손쉽게 배열 사이즈 구할수 있는 파스칼 하쉴?

0
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
180667 [컴퓨터] 케이스 팬 장착 어려울까요? 1 노호야 0 5 분 전 5
180666 [컴퓨터] 윈도우 11 구매하려고하는데 1 바나나사탕 0 51 분 전 30
180665 [컴퓨터] 이정도 스펙이면 4k 게임 잘 돌아갈까? 2 뽀삐뽀삐 0 2 시간 전 61
180664 [컴퓨터] SSD를 마이그레이션 떴는데 부팅 선택이 안됨 2 참치는동원 0 7 시간 전 64
180663 [컴퓨터] 이제 논KCPU는 기본쿨러+HB보드로만 조립해야할듯 1 Vv연옥의사신vV 0 8 시간 전 105
180662 [컴퓨터] 중국 모니터 살까 생각중임 5 너가전부옳아 0 9 시간 전 140
180661 [컴퓨터] 얼마전에 고장나서 다 뒤집어깠다던 개붕이인데 1 밀실심사 0 10 시간 전 118
180660 [잡담] 15일에 ㄷㄱㄷㄱ 첫조립 해야지 1 함박눈 0 10 시간 전 69
180659 [잡담] 스피커 소리가 안ㄴ남 ㅜㅜ 도움!! 匠人 0 11 시간 전 42
180658 [컴퓨터] 5700x3D가 작업에서 그리 못써먹을정돈가?? 5 포츈아그렇구나 0 12 시간 전 203
180657 [컴퓨터] 애플 매직트랙패드 이거 재밌다 4 해날 0 12 시간 전 146
180656 [컴퓨터] 컴터 업글 질문좀 받아줘 5 lake 0 13 시간 전 70
180655 [컴퓨터] 유튜브 재생 버벅임/렉 문제 개인해결함 6 GLaDOS 0 14 시간 전 130
180654 [잡담] 스위치2 나오면 사려는데 7 00원짜리 0 15 시간 전 137
180653 [잡담] 배틀메이지랑 셀레스티얼 연기루머 뭐임ㅋㅋㅋㅋㅋㅋㅋ 3 Gargantua 1 15 시간 전 71
180652 [컴퓨터] 노트북 선택좀 도와주세요! 2 두부는초장에찍먹 0 16 시간 전 92
180651 [모바일] 이심에서 유심으로 이식하는거 좀 아는 사람 있음까.. 6 ULTEGRA 0 17 시간 전 91
180650 [잡담] 시놀로지 223j랑 베스테이션이랑 뭐가 더 좋음?? 10 고민된다여 0 19 시간 전 95
180649 [컴퓨터] 2.5 SSD -> M.2 체감됨? 13 스피오스피오스피... 0 19 시간 전 266
180648 [모바일] 아이폰16 VS SE4 + 워치 6 누군가는해야하잖아 0 20 시간 전 221