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);
}