C언어 정리

C언어 정리(구조체/동적할당)

알고리즘 강의가 C언어로 진행되다 보니 몇몇 잊어버린 개념이 있어 정리해본다.

구조체

  • 여러개의 변수를 묶어 하나의 객체로 표현 한 것
  • 자바에서 객체랑 비슷하다고 생각하면 될 것 같다
typedef struct student{
	int studentId;
	char *name;
};

student s;
//typedef를 사용하면 struct 표기 없이 
//구조체이름에 바로 접근 가능하다

//익명 구조체
typedef struct{
	int studentId;
	char *name;
}student;
//student로 바로 접근 가능하다

동적할당

  • 동적으로 할당된 변수는 heap 영역에 저장된다
  • 코드영역
    소스코드
    데이터 영역
    전역변수/정적변수
    힙 영역
    동적할당변수
    스택 영역
    지역변수/매개변수
  • 스택변수는 메모리 해제를 하지 않아도 된다.
  • c++ new/delete 대신 malloc/free를 사용
  • malloc 사용시 메모리할당에 성공하면 주소를 반환 아니면 null을 반환
  • malloc(매개 변수 해당하는 사이즈 크기)

memset(포인터, 값, 크기)

  • 한 바이트씩 처리하므로 문자열 배열 처리 방식과 흡사하다.
  • 일괄적인 범위의 메모리를 모두 특정한 값으로 설정하기 위해 사용
  • //이중 포인터 : 3*3 
    #include <stdio.h>
    #include <stdlib.h> //동적할당 관련 함수 사용 헤더
    
    int main(void){
    	int **p = (int **)malloc(sizeof(int*) *3);
    	//int*타입 사이즈 3개만큼의 포인터를 생성
    
    	for(int i = 0; i<3; i++){
    		*(p + i) = (int*)malloc(sizeof(int) *3);
    		//int 타입 사이즈 3개만큼의 포인터를 생성
    	}
    
    	//이중 포인터이므로 이중for문을 작성
    	for(int i = 0; i<3; i<++){
    		for(int j = 0; j<3; j<++){
    			*(*(p+i)+j) = i*3+j;
    			//해당 포인터에 해당하는 숫자를 할당
    	}
    	for(int i = 0; i<3; i<++){
    		for(int j = 0; j<3; j<++){
    			printf("%d", *(*(p+i))+j);
    		}
    		printf("\n");
    	}
    
    	free(p);
    }