배열의 이름은 포인터이고, 값을 바꿀 수 없는 상수 형태의 포인터입니다. 또한, 배열의 요소들은 연속적인 메모리 주소값을 가지게 됩니다. 1. 1차원 배열 int arr[5] = {9, 2, 10, 3, 0}; printf("arr = %p\n", arr); printf("arr+1 = %p\n", arr+1); printf("arr+2 = %p\n", arr+2); printf("arr[0]의 주소 = %p\n", &arr[0]); printf("arr[1]의 주소 = %p\n", &arr[1]); printf("arr[2]의 주소 = %p\n", &arr[2]); printf("arr[3]의 주소 = %p\n", &arr[3]); printf("arr[4]의 주소 = %p\n", &arr[4]); 결..
1. 포인터 사용 이유 함수에 인자를 전해줄 때를 생각하면 왜 포인터가 필요한지 이해하기 쉽습니다. 함수에 인자 전달 시 포인터를 사용하지 않는다면 전달되는 인자의 크기만큼의 메모리를 복사하게 되기 때문입니다. 만약 int형 100개를 가진 배열을 포인터를 쓰지 않고 인자로 전달한다면 복사하기 위해 4byte x 100 = 400byte의 메모리를 더 쓰게 되는 일이 발생합니다. 하지만 포인터를 쓰게 된다면 바로 배열의 메모리에 접근하여 값을 가져올 수 있게 됩니다. pc를 사용하면 메모리 용량이 커서 괜찮을 수도 있으나 임베디드 보드같이 메모리가 작다면 포인터를 사용할 수 밖에 없을 것입니다. 2. 포인터 선언 int *ptr = NULL; //int형 변수를 가리키는 포인터 float *ptr = N..
Study 2021. 12. 6. 09:03
배열의 이름은 포인터이고, 값을 바꿀 수 없는 상수 형태의 포인터입니다. 또한, 배열의 요소들은 연속적인 메모리 주소값을 가지게 됩니다. 1. 1차원 배열 int arr[5] = {9, 2, 10, 3, 0}; printf("arr = %p\n", arr); printf("arr+1 = %p\n", arr+1); printf("arr+2 = %p\n", arr+2); printf("arr[0]의 주소 = %p\n", &arr[0]); printf("arr[1]의 주소 = %p\n", &arr[1]); printf("arr[2]의 주소 = %p\n", &arr[2]); printf("arr[3]의 주소 = %p\n", &arr[3]); printf("arr[4]의 주소 = %p\n", &arr[4]); 결..
Study 2021. 12. 2. 16:06
1. 포인터 사용 이유 함수에 인자를 전해줄 때를 생각하면 왜 포인터가 필요한지 이해하기 쉽습니다. 함수에 인자 전달 시 포인터를 사용하지 않는다면 전달되는 인자의 크기만큼의 메모리를 복사하게 되기 때문입니다. 만약 int형 100개를 가진 배열을 포인터를 쓰지 않고 인자로 전달한다면 복사하기 위해 4byte x 100 = 400byte의 메모리를 더 쓰게 되는 일이 발생합니다. 하지만 포인터를 쓰게 된다면 바로 배열의 메모리에 접근하여 값을 가져올 수 있게 됩니다. pc를 사용하면 메모리 용량이 커서 괜찮을 수도 있으나 임베디드 보드같이 메모리가 작다면 포인터를 사용할 수 밖에 없을 것입니다. 2. 포인터 선언 int *ptr = NULL; //int형 변수를 가리키는 포인터 float *ptr = N..
Study 2021. 12. 2. 14:34
1. 매크로 CC=gcc CFLAGS=gcc옵션 CXX=g++ CPPFLAGS=g++옵션 INC=include path (ex. -I/home/moon/.../include) 2. 레이블 $* : 확장자가 없는 현재 target $@ : 현재 target CC=gcc OBJS=main.o main.o: main.c io.h test: $(OBJS) $(CC) -o $@ $*.c # $@ = test # $* = main 더보기 더보기 $@ : test $* : main $