나는 C++의 배열에 대해 스스로에게 질문을 던졌다. 글쎄, 우리는 모두 배열이 고정 된 콜렉션이라는 것을 알고 있습니다. 배열을 정의 할 때 배열 길이를 선언해야하기 때문에 fixed라고 말합니다. 음, 예를 살펴 보자 :배열 크기 다루기
char myarray[10] = {'\0'};
int sz = sizeof(myarray); // It is supposed to be 10
음, 정확, (10)는 sizeof에 의해 반환되는 숫자입니다. 변수에 얼마나 많은 공간이 있는지 알기 때문에 컴파일러가이를 수행 할 수 있습니다.
지금이 상황에서 무슨 생각 :
void dosome(mystruct* arr) {
int elements = sizeof(arr)/sizeof(mystruct);
for (int i = 0; i < elements; i++) {
// Do something hoping no overflow will ever occur
}
}
니스 ...하지만 나는 그것이 오버 플로우 경향이있을 수 있다고 생각. 나는이 함수에 나는 "일반적인"방법으로 생성 된 배열을 전달하면 아무런 문제 될 것이 없다 :
mystruct array[20];
dosome(array);
없음 문제. 하지만이 작업을 수행 할 경우 :
어떻게됩니까mystruct* array = (mystruct*)malloc(80*sizeof(mystruct));
dosome(array);
??????????????????? sizeof가 작동하는 방식을 이해하고 싶습니다.이 함수는 컴파일 타임에 평가됩니다. ??? 좋아요. 배열을 사용하면 어떻게됩니까?하지만 그와 같은 데이터 블록처럼 매우 성가신 무엇입니까? 또한, malloc에 대한 또 다른 호출을 realloc하여 doslob에 해당 데이터 블록을 다시 처리하도록 요청할 수 있습니다. 작동할까요? 신체적으로 시도해 볼 수도 있지만 sizeof의 행동에 대한 정확한 대답을 얻을 수 있습니다.
감사합니다.
주의'를 sizeof (편곡)는''를 sizeof (* MYSTRUCT)'에 관계없이 C에서 개발하는 경우 함수가 – icecrime
라고 방식 ++입니다, 가능할 때마다'malloc' 대신'new'를 사용하십시오.'mystruct * array = new mystruct [20];'와 같이 배열을 정의하면 여전히 코드가 잘못 작동합니까? – suszterpatt
icecrime이 맞다, 당신이 틀린 기대를 가지고있다 – Simone