프로그래밍

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
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
180870 [컴퓨터] 1070 고장나서 수리 맡길까하는데 고민임 2 년째모쏠 0 25 분 전 14
180869 [컴퓨터] 노트북 추천좀 1 주공204동 0 48 분 전 16
180868 [잡담] 두번째 독거미 구매 완료 1 닼린이 0 1 시간 전 76
180867 [컴퓨터] 글카 4060 살까여 60ti살까영 2 김태연님 0 1 시간 전 66
180866 [컴퓨터] 노트북 소음 사용시간 발열 질문 1 sdahjkfhwk 0 2 시간 전 38
180865 [잡담] 수냉쿨러 어떻게 버려야하지? 회장님 0 2 시간 전 49
180864 [컴퓨터] 모니터를 뒤집어서 쓰고싶다 3 손또끼 0 2 시간 전 52
180863 [모바일] 병원 삼성페이 신분증도 되나요 5 초전도치 0 2 시간 전 95
180862 [잡담] 갤럭시 리마인더 대박이네 츄이로 0 3 시간 전 87
180861 [모바일] 3년만에 핸드폰 바꾸려고 하는데 어떤 방법이 제일 저렴할까요?? 1 행복한사회 0 3 시간 전 33
180860 [컴퓨터] nzxt의 h9 flow 케이스 후기 + 질문 4 너가전부옳아 0 3 시간 전 42
180859 [컴퓨터] 지슈라 베터리 잔량은 무조건 지허브 켜서 봐야됨? 5 엄지척 0 5 시간 전 86
180858 [잡담] 유튜브 시청용으로 뮤패드 k10 어떻다고봄? 2 깊은산맑은물 0 7 시간 전 69
180857 [모바일] 블루투스 헤드셋 추천 부탁드립니다. 2 밀실심사 0 13 시간 전 87
180856 [모바일] 자급제 알뜰폰 쓰는 사람은 데이터 어떻게 쓰지? 7 Liger 0 13 시간 전 214
180855 [모바일] 개드립 최초임? 1 날막만졌어요 4 13 시간 전 195
180854 [컴퓨터] 롤이 렉걸리는데 ㅜㅡㅜ 4 순찰경 0 14 시간 전 95
180853 [잡담] AULA 키보드 좋다 4 그달 0 14 시간 전 202
180852 [컴퓨터] 제우스랩 휴대용 모니터 쓰는 개붕이들은 참고해라 4 유닉 1 15 시간 전 150
180851 [컴퓨터] 키보드 뉴비 질문이 있습니다 4 퇴근하고싶소 0 15 시간 전 43