C 언어에서 void 포인터는 암시적으로 개체 포인터 유형으로 변환됩니다. malloc() 함수는 C89 표준에서 void *를 반환합니다. 이전 버전의 C에서 malloc()은 char *를 반환합니다. C++ 언어에서 기본적으로 malloc()은 int 값을 반환합니다. 따라서 포인터는 명시적 캐스팅을 사용하여 개체 포인터로 변환됩니다.
다음은 C 언어에서 메모리를 할당하는 구문입니다.
pointer_name = malloc(size);
여기,
pointer_name − 포인터에 부여된 모든 이름.
크기 − 할당된 메모리의 크기(바이트)입니다.
다음은 C 언어의 malloc() 예제입니다.
예시
#include <stdio.h> #include <stdlib.h> int main() { int n = 4, i, *p, s = 0; p = malloc(n * sizeof(int)); if(p == NULL) { printf("\nError! memory not allocated."); exit(0); } printf("\nEnter elements of array : "); for(i = 0; i < n; ++i) { scanf("%d", p + i); s += *(p + i); } printf("\nSum : %d", s); return 0; }
출력
Enter elements of array : 2 28 12 32 Sum : 74
위의 C 언어 예제에서 명시적 캐스팅을 수행하면 오류가 표시되지 않습니다.
다음은 C++ 언어에서 메모리를 할당하는 구문입니다.
pointer_name = (cast-type*) malloc(size);
여기,
pointer_name − 포인터에 부여된 모든 이름.
캐스트 유형 − malloc()에 의해 할당된 메모리를 캐스팅하려는 데이터 유형.
크기 − 할당된 메모리의 크기(바이트)입니다.
다음은 C++ 언어의 malloc() 예제입니다.
예시
#include <iostream> using namespace std; int main() { int n = 4, i, *p, s = 0; p = (int *)malloc(n * sizeof(int)); if(p == NULL) { cout << "\nError! memory not allocated."; exit(0); } cout << "\nEnter elements of array : "; for(i = 0; i < n; ++i) { cin >> (p + i); s += *(p + i); } cout << "\nSum : ", s; return 0; }
출력
Enter elements of array : 28 65 3 8 Sum : 104
위의 C++ 언어 예제에서 명시적 캐스팅을 수행하지 않으면 프로그램은 다음 오류를 표시합니다.
error: invalid conversion from ‘void*’ to ‘int*’ [-fpermissive] p = malloc(n * sizeof(int));