소개
널 포인터 (null pointer) 는 어떤 메모리 주소도 가리키지 않는 포인터입니다. C 프로그래밍에서 널 포인터는 stdio.h 헤더 파일에 정의된 상수 NULL 로 표현됩니다. 널 포인터를 사용하면 오류를 방지하고 C 프로그램에 기능을 추가하는 데 도움이 될 수 있습니다.
이 Lab 에서는 널 포인터에 대해 배우고 C 프로그래밍에서 이를 사용하는 방법을 배웁니다. 널 포인터를 사용하여 배열에서 이름을 검색하는 프로그램을 만들 것입니다.
참고: 코딩을 연습하고 gcc 를 사용하여 컴파일하고 실행하는 방법을 배우려면 직접
~/project/main.c파일을 생성해야 합니다.
cd ~/project
## create main.c
touch main.c
## compile main.c
gcc main.c -o main
## run main
./main
널 포인터 선언하기
C 프로그래밍에서 널 포인터는 아무것도 가리키지 않는 포인터입니다. 널 포인터를 선언하려면 NULL 값을 포인터 변수에 할당할 수 있습니다.
#include <stdio.h>
int main() {
int *ptr = NULL; // ptr is a NULL pointer
return 0;
}
void 포인터 선언하기
void 포인터는 특정 타입이 없는 포인터입니다. 이는 모든 타입의 데이터를 가리키는 데 사용될 수 있습니다. void 포인터를 선언하려면 별표(*) 앞에 키워드 void를 사용합니다.
void 포인터는 역참조되거나 포인터 연산에 사용되기 전에 다른 데이터 타입으로 형 변환(cast)되어야 합니다.
#include <stdio.h>
int main() {
int n = 10;
void *ptr = &n; // ptr은 int를 가리키는 void 포인터입니다
printf("Value of n: %d\n", *(int*)ptr); // 역참조 전에 int 포인터로 형 변환합니다
return 0;
}
포인터 배열 끝을 표시하기 위해 Null 포인터 사용
C 프로그래밍에서 널 포인터를 사용하여 포인터 배열의 끝을 표시할 수 있습니다. 이는 배열에서 이름 또는 기타 데이터를 검색할 때 유용할 수 있습니다.
#include <stdio.h>
#include <string.h>
int search(char *ptr[], char* name);
char *names[] = {
"John",
"Peter",
"Thor",
"Chris",
"Tony",
NULL
};
int main(void)
{
if(search(names, "Peter") != 1)
{
printf("Peter is in the list.\n");
}
if(search(names, "Scarlett") == -1)
{
printf("Scarlett not found.\n");
}
return 0;
}
// define the search function
int search(char *ptr[], char*name)
{
for(int i=0; ptr[i]; ++i)
{
if(!strcmp(ptr[i], name))
{
return i;
}
}
return -1; // name not found
}
사용자 입력을 위한 프로그램 사용자 정의
사용자가 배열에 이름을 입력하고 이름을 검색할 수 있도록 프로그램을 사용자 정의할 수 있습니다. 이는 C 프로그래밍에서 scanf() 함수를 사용하여 수행할 수 있습니다.
#include <stdio.h>
#include <string.h>
#define MAX_NAMES 100
int search(char *ptr[], char* name);
int main(void)
{
char *names[MAX_NAMES];
char name[50];
int count = 0;
printf("Enter names (press enter to stop):\n");
// get names from user input
while(1)
{
scanf("%s", name);
if(strcmp(name, "") == 0)
{
break;
}
names[count] = (char*) malloc(strlen(name)+1);
strcpy(names[count], name);
count++;
}
names[count] = NULL; // mark end of array with null pointer
// search for names
while(1)
{
printf("Enter name to search for (press enter to stop):\n");
scanf("%s", name);
if(strcmp(name, "") == 0)
{
break;
}
int index = search(names, name);
if(index != -1)
{
printf("%s is found in index %d.\n", name, index);
}
else
{
printf("%s not found.\n", name);
}
}
return 0;
}
// define the search function
int search(char *ptr[], char*name)
{
for(int i=0; ptr[i]; ++i)
{
if(!strcmp(ptr[i], name))
{
return i;
}
}
return -1; // name not found
}
요약
이 랩에서는 널 포인터 (null pointer) 와 C 프로그래밍에서 이를 사용하는 방법에 대해 배웠습니다. 널 포인터와 void 포인터를 선언하는 방법, 그리고 널 포인터를 사용하여 포인터 배열의 끝을 표시하는 방법을 살펴보았습니다. 또한 사용자 입력을 허용하고 널 포인터를 사용하여 이름을 검색하도록 프로그램을 사용자 정의하는 방법도 배웠습니다. 프로그램에서 널 포인터를 사용함으로써 프로그램을 더욱 강력하게 만들고 일반적인 오류를 방지할 수 있습니다.



