728x90
반응형
포인터 변수 선언
포인터 변수를 선언할 때 아래와 같은 형태로 선언을 할 수 있다.
#include <stdio.h>
struct Box
{
int width;
int height;
int length;
};
int main()
{
struct Box* box_a;
box_a.width = 10;
box_a.height = 20;
box_a.length = 20;
return 0;
}
그러나 위 코드처럼 선언한 포인터 변수를 바로 사용하게 되면 메모리 에러가 발생할 수 있다.
포인터 변수를 선언하면 변수의 주소를 담기 위한 8byte의 공간을 할당할 뿐
구조체의 메모리 공간은 따로 할당하지 않기 때문이다.
따라서 포인터 변수를 선언하고 해당 포인터 변수가 가리키는 주소에 메모리를 할당해 주는 작업은 따로 진행해야 한다.
#include <stdio.h>
#include <stdilb.h>
struct Box
{
int width;
int height;
int length;
};
int main()
{
struct Box* box_a = (struct Box*) malloc(sizeof(struct Box));
if (box_a == NULL) {
printf("Memory allocation failed\n");
return 1;
}
box_a.width = 10;
box_a.height = 20;
box_a.length = 20;
return 0;
}
따라서 위 코드처럼 사용하는 것이 옳다.
그러나 아래 코드는 문법적인 오류가 발생하지 않는다.
#include <stdio.h>
int main()
{
char *str;
str = "Hello, World!";
return 0;
}
문자열을 전달할 때에는 메모리 공간에 먼저 문자열이 저장되고 해당 문자열의 주소를 전달하는 형식이기 때문에
포인터 변수에 문자열을 넣었으므로 문법적으로 오류가 발생하지 않는다.
728x90
반응형
'C언어 > C언어 문법' 카테고리의 다른 글
[C언어] 열거형 (enum) (0) | 2024.03.10 |
---|---|
[C언어] 헤더파일, #include의 활용 (0) | 2024.02.28 |
[C언어] 파일의 분할 (extern, static) (0) | 2024.02.28 |
[C언어] 파일 입출력, 파일 스트림 생성 (fopen, fclose) (0) | 2024.02.28 |
[C언어] 조건부 컴파일 매크로 (#if, #elif, #endif, #ifdef, #ifndef) (0) | 2024.02.25 |