C에서 배열은 동적으로 크기가 지정되지 않는다는 것을 알고 있습니다.sizeof()를 사용하여 배열 길이를 정의 할 수 있습니까?
염두에두고 다음 코드가 허용됩니까?
char bytes[sizeof(double)];
내 생각은 sizeof
프로그램 실행시 인수에서 작동 등이 허용되지 않을 것입니다. (이중 같은 길이 문자의 배열을 선언하려고),하지만 난 모르겠어요 .
또한 C 대신 C++를 사용하면 차이가 있습니까?
C에서 배열은 동적으로 크기가 지정되지 않는다는 것을 알고 있습니다.sizeof()를 사용하여 배열 길이를 정의 할 수 있습니까?
염두에두고 다음 코드가 허용됩니까?
char bytes[sizeof(double)];
내 생각은 sizeof
프로그램 실행시 인수에서 작동 등이 허용되지 않을 것입니다. (이중 같은 길이 문자의 배열을 선언하려고),하지만 난 모르겠어요 .
또한 C 대신 C++를 사용하면 차이가 있습니까?
sizeof 표현식은 컴파일 타임에 (컴파일러가 전처리 기가 아닌) 계산하여 표현식이 적합합니다.
동적 배열이 허용되는 C99에서이 규칙의 예외가 있습니다. 이 경우 sizeof는 컨텍스트에 따라 런타임에 평가됩니다 (http://en.wikipedia.org/wiki/Sizeof). 이 질문에서 표현의 적법성은 변하지 않습니다.
네, 그렇게해도 좋습니다. sizeof()의 값은 컴파일 타임에 결정됩니다.
그렇습니다. sizeof(double)
은 컴파일 타임 상수이기 때문에 동적 크기가 될 수는 없습니다.
피연산자가 VLA가 아닌 경우 sizeof
을 실제 연결 문자열로 사용할 수 있습니다. http://ideone.com/95bwM
#include <stdio.h>
#include <string.h>
int main(void) {
double x;
unsigned char dbl[sizeof x]; /* real constant */
/* make x's format have a 1 bit on the "correct" place */
x = 32.000000000000004;
memcpy(dbl, &x, sizeof x);
switch (dbl[0]) {
case sizeof *dbl: puts("1"); break; /* real constant */
case 0: puts("0"); break;
default: puts("other");
}
return 0;
}
참조 코드