C sizeof() 함수에 대한 빠른 질문이 있습니다. 함수에 배열을 전달하고 그 함수 안에 배열의 크기를 확인하려고합니다. 내가 checkArraySize 같은 함수를 호출하기 전에, 코드의 상태에서 주석으로함수에 전달 된 배열에 sizeof() 사용
void checkArraySize(char data[])
{
int internalSize = sizeof(data); //internalSize is reported as 4
}
void main(void)
{
char data[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
int externalSize = sizeof(data); //externalSize is reported as 8
checkArraySize(data);
}
그러나,에 관계없이 입력 배열의 크기, 함수 내에서 항상 예를 들어 4의 크기를 갖고있는 것 같아요(), 배열의 크기를 확인하고 8 표시합니다. 그러나 함수 안에 배열의 크기를 확인할 때 그것은 단지 4 요소가있는 것으로보고합니다 (입력 요소의 크기에 관계없이 4 개의 요소를보고합니다).
자주 이와 같은 문제가 발생하는 경우 주제에 대한 이해가 부족하기 때문입니다. 그래서 나는 전달 배열이 어떻게 작동하는지에 관해서 뭔가를 놓치고 있다고 확신합니다. 그렇지 않다면 왜 이런 일이 일어나고 있는지에 대한 아이디어가 있습니까?
참고 : 이것은 PIC32에 있으므로 마이크로 칩의 MPLAB X IDE 및 XC32 컴파일러를 사용하고 있습니다.
'sizeof' 함수 아니라, 조작자. 그렇기 때문에 유형 (괄호 사용) 및 표현식 (괄호 사용 필요 없음)에서 사용할 수 있습니다.인수가 가변적으로 수정 된 유형이 아닌 한 인수는 평가되지 않으므로 결과는 컴파일 타임 상수 표현입니다. (임베디드 시스템에 대해 말하지 않았다면,'main'은 항상'int'를 리턴한다고 충고했을 것입니다. 독립적 인 환경에서는 상황이 더 다양합니다.) – Deduplicator