malloc()에 대해 자세히 연구하면서이 이상한 동작을 발견했습니다.malloc에서 float, double 또는 char 값이 전달 된 경우 어떻게됩니까
int *p;
p=(int*)malloc(10.45);
p=(int*)malloc(10.45f);
p=(int*)malloc('j');
프로그램은 이러한 경고문만으로 컴파일되며 올바른 주소를 반환합니다. 실제 결과는 무엇입니까?
malloc()에 대해 자세히 연구하면서이 이상한 동작을 발견했습니다.malloc에서 float, double 또는 char 값이 전달 된 경우 어떻게됩니까
int *p;
p=(int*)malloc(10.45);
p=(int*)malloc(10.45f);
p=(int*)malloc('j');
프로그램은 이러한 경고문만으로 컴파일되며 올바른 주소를 반환합니다. 실제 결과는 무엇입니까?
명시 적 형 변환이있는 것처럼 모든 값은 암시 적으로 size_t
으로 변환되어 함수를 호출합니다. 부동 소수점 숫자는 잘 리며 'j'
은 문자 집합의 숫자 값으로 해석됩니다.
Malloc은 정수 '바이트 수'를 허용하도록 정의됩니다.
C 언어는 다른 데이터 유형에서 정수로 변환하기위한 규칙을 정의합니다.
각 값이 변환되는 것을 스스로 해결할 수있을 것입니다.
"그냥 경고"는 아마도 설명을 숨 깁니다.
비 정수형의 값을 정수형 킥인으로 변환/승격시키는 다양한 규칙으로, malloc()
은 size_t
즉 부호없는 정수를 얻습니다. 부동 소수점 호출은 예를 들어 분수를 삭제하고 10 바이트를 할당하려고 시도합니다.
malloc()
은 size_t 인수를 취합니다.
컴파일러는 10
에 10.45
/10.45f
을 절단하고 그 ASCII 값 (106
)에 'j'
를 변환합니다.
그것은 size_t
아니, 오히려 암시 적 변환의 언어를 입력 할 수 있습니다. 캐스트는 정의에 따라 명시 적입니다. –
우박에 대한 암시 적 캐스트가 강하게 정적 – jev