컴퓨터/C
우선 자료형 키워드들의 개념이 제대로 확립되어 있는지 확인해 볼 필요가 있습니다. C언어를 이용한 프로그래밍에서는 메모리 상의 데이터를 어떠한 형태로 사용하고 있는지의 이해가 아주 중요한 부분입니다.
프로그래머가 사용하는 다양한 메모리를 사용하는 방법이 바로 이 자료형 키워드들을 이용하는 것입니다.
이 자료형 키워드는 크게 2가지로 구분할 수 있습니다.
이 중 기본 자료형 키워드들은 void 키워드를 제외한 나머지 키워드들은 메모리를 얼마큼 어떠한 형태로 사용될지 정의되어 있습니다. 이 자료형들을 이용해 변수, 함수 등을 어떻게 메모리상에서 제어할지 프로그래머가 상황에 따라 사용하게 됩니다.
void 키워드는 "지정해준 타입이 없다."의 의미를 가지고 있는 키워드입니다. 즉 void 키워드를 사용하면 사용된 함수 또는 변수에 메모리를 어떻게 사용할지 타입이 정해지지 않았다는 말입니다. 그렇다면 다양한 상황에 따라 void 키워드를 사용하는 예제를 보며 이해를 해보도록 하겠습니다.
C언어에서 변수를 선언하기 위해서는 그 변수가 사용할 메모리 공간을 자료형 키워드로 정의해주어야 합니다.
void 키워드의 경우 메모리 공간을 정의하는 타입이 없기 때문에 일반 변수에서는 사용할 수 없습니다.
특정한 형태로 메모리 공간을 할당하고 그곳에 데이터를 저장해야 되는데 void 타입의 경우 정의된 타입이 없기 때문입니다.
int number = 100; // int형(4Byte)공간에 정수 100을 저장
void number = 100; // error 발생
C언어에서 함수를 선언하기 위해서는 함수가 종료되는 시점에 반환을 어떤 데이터 타입으로 할지 알려주어야 합니다.
함수에서 계산된 인자를 전달하여 함수를 호출한 영역에서 사용하기 위해서 반환 자료형은 함수 선언에서 필수입니다.
이런 경우 지정해준 타입이 없는 void키워드를 사용하면 어떻게 될까요? 함수 내부에서 동작만을 하고 함수를 호출하는 영역에 아무것도 반환하지 않게 됩니다. 이런 void를 사용한 함수의 형태를 많이 볼 수 있었을 것입니다.
void function()
{
printf("이 함수는 반환값이 없습니다(지정된 반환 타입이 없습니다.)\n");
}
포인터 변수는 크게 2가지의 기능을 가지고 있습니다.
예를 들어 아래 포인터 변수의 경우를 해석하면 어떻게 될까요
int num = 10;
int *p = #
*p = 20;
여기까지는 포인터의 개념을 이해하고 있으면 알고 있을라 생각합니다.
그렇다면 void 포인터의 경우에는 어떻게 될까요?
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
int num = 100;
void* ptr = #
printf("%d\n", *(int*)ptr);
printf("%d\n", *(((char*)ptr) + 0));
printf("%d\n", *(((char*)ptr) + 1));
printf("%d\n", *(((char*)ptr) + 2));
printf("%d\n", *(((char*)ptr) + 3));
return 0;
}
각각 char*로 형변환과 주소 연산을 통해 1byte씩 읽어오면
64 / 0 / 0 / 0 (16진수)
100 / 0 / 0 / 0 (10진수)
이런 식으로 void를 사용하면 조금 더 추상적인 표현 및 활용이 가능해집니다.
그래서 void 포인터를 타입이 없는 포인터 또는 만능형 포인터라고도 많이 부릅니다.
C 언어 - 디버깅해보기 (0) | 2021.07.12 |
---|---|
C 언어 - 실습 - 학생관리 프로그램Ver1(기초 지식 이용) (0) | 2021.07.11 |
C 언어 - 문자열을 숫자로 atoi / atol / atoll / atof (0) | 2021.07.08 |
C 언어 - 동적 메모리 할당 - malloc 함수 (0) | 2021.07.06 |
C 언어 - 동적메모리의 개념 (0) | 2021.07.02 |
91년생 공학엔지니어의 개발일지
TODAY :
YESTER DAY :
TOTAL :
Commnet