본문 바로가기

C언어

(3)
[C]void 포인터에 자료형 할당하기 일반적인 자료형 할당하기 void 포인터는 자유로운 영혼이다. void 포인터를 다른 자료형으로 변환하면 역참조를 할 수 있다. *(할당받은 자료형 *)ptr 역참조란, 포인터형으로 선언된 변수에다가 *를 붙여 값을 얻어낸 과정 #include int main() { int num1 = 10; float num2 = 3.5f; char c1 = 'a'; void *ptr; ptr = &num1; // num1의 메모리 주소를 void 포인터 ptr에 저장 // printf("%d\n", *ptr); // 컴파일 에러 printf("%d\n", *(int *)ptr); // 10: void 포인터를 int 포인터로 변환한 뒤 역참조 ptr = &num2; // num2의 메모리 주소를 void 포인터 pt..
[C] 문자열 포인터와 문자열 배열 정리 C언어에서는 직접적으로 문자열을 처리할 수 없다. C++에서와 같이 string s1 = "Hello"; 와 같이 할 수 없다는 것이다. 그럼 어떻게 해야 할까? 변수에 직접적으로 저장하는 것이 아닌, 포인터를 이용한다. char c1 = 'a'; #include int main(){ char c1 = 'a'; char *s1 = "hello"; char s2[10] = "hello"; char s3[6] = "hello"; char s4[] = "hello"; } s1은 문자열의 시작주솟값을 가지고 있다. 그리고 문자열의 끝은 항상 \0이다. C언어는 문자열이 \0에서 끝이라는 것을 내부적으로 알고 있다. 그래서 printf는 문자열을 출력할 때 문자열을 계속 출력하다가 NULL에서 출력을 끝낸다. 읽..
[C] 구조체 메모리 크기 계산 빠르게 정리 typedef struct 선언 시, 변수 선언에 대한 메모리 공간 크기에 대해서 알아보자. char : 1 byte int : 4 byte double : 8 byte pointer : (32bit) 4 byte, (64bit) 8 byte sizeof 를 통해서 변수의 사이즈를 알 수 있다. typedef struct student { char a; int b; }S; void main() { printf("메모리 크기 = %d/n", sizeof(S)); // 8 } char + int 해서 5 byte일 것 같지만 8 byte이다. 어떠한 연고로? 가장 큰 자료형 크기의 배수로 정렬한다 int 형이 4 byte이고 구조체의 멤버변수 중 제일 크게 차지하기 때문에 4 byte 단위의 메모리를 잡게 ..