본문 바로가기
반응형

개발 Tools/C_개념9

C Malloc 0으로 초기화 ( Calloc ) Malloc으로 할당하면 초기화가 안된다. 아래와 같이 코드를 돌리면 char* input = (char*)malloc(sizeof(char) * INPUT_NUM); for (int i = 0; i < INPUT_NUM; i++) printf("%d\n", input[i]); 이런 이상한 값이 들어간다. 0으로 초기화하기 위해서 Calloc을 실행하면 된다. 선언 방식이 조금 다르니 유의 바란다. char* input = (char*)calloc(INPUT_NUM, sizeof(char)); for (int i = 0; i < INPUT_NUM; i++) printf("%d\n", input[i]); 2022. 10. 26.
C 포인터가 뭐길래 포인터 ( Pointer ) 하도 포인터 포인터 해서 다들 알고 있을 것이다. 맞다. 그냥 주소다. 주소를 가리키고 바로 그 주소로 접근하기 위해 사용한다. 변수는 메모리를 할당받는다. 이때 메모리는 주소와 값으로 나눠져 있다고 생각한다. + 실제로는 코드 부분과 데이터 부분들이 나눠져 있다. 그래서 CPU는 코드를 통해 접근할 데이터의 주소를 얻은 다음에 그 주소를 참조하여 데이터에 접근한다. 일단 먼저 느껴보자. 뭐든 느낌이 중요하다. 아, 그전에 포인터 변수의 선언은 " * "를 통해서 한다. 예를 들어 int *p;와같이 선언한다. 아래 코드를 보고 어떻게 되는지 보자. #include int main(void) { int k = 8; int *p; p = &k; // 포인터의 초기화 printf.. 2022. 6. 24.
C 배열의 모든 것이었으면 좋겠다 ( 문자열, gets, puts, 2차원 배열, Call by value, Call by reference ) 배열 쉽게 말해서 변수를 한 번에 왕창 만들어주는 것이다. 근데 번호와 순서가 있는 변수를 선언해준다는 점이 기존 변수와 다른 점이다. 선언된 배열은 형이 같은 변수를 만드는데 int, float, char, static... 다 된다. 10개의 변수를 int s1, int s2... 선언하는 것보다 int s[10] 이렇게 하나로 선언해주는 게 더 효율적이다. 그래서 배열이 필요하다. 각각 모두 고유의 이름이 있어야 하는데 번호로 구분한다. 1차원 배열의 선언에는 여러 방법이 있다. // 선언1 int num[4]; // 선언2 int num[4] = {0, 1, 2, 3}; // 선언3 int num[] = {0, 1, 2, 3}; 선언 1은 그냥 선언만 해준다. 즉 공간만 할당해 준다는 의미다. 선.. 2022. 6. 18.
C 기억 클래스 (storage class, auto, static, extern, register) auto 자동 변수의 정의는 함수 안에서 선언하는 지역 변수들은 모두 auto변수다. auto변수는 함수가 호출되어 실행될 때만 메모리(stack)가 할당되고 함수가 끝나면 메모리를 회수한다. 이때 초기화를 꼭 해줘야 한다. 아니면 쓰레기 값이 들어갈 수도 있다. 중요한 건, 실행될 때이다. 디버깅할 때 코드를 쭉 훑어보는데 선언이 돼 있지만 생성되진 않고 해당 코드가 실행될 때 생성된다. 쉽게 말하면 우리가 흔히 사용하고 있는 변수가 다 auto변수다. auto를 생략하여 사용할 수 있다. 예를 들어 아래 선언한 두 변수는 동일하다. int main(void) { auto int var_auto = 0; int var_non_auto = 0; } main문이 실행되고 종료되면 var_auto, var_.. 2022. 6. 15.
C 개념 1부터 n까지 합 구하기 여러 방법이 있지만 for 반복문을 사용하여 구현 가능하다 #include int main() { int i, n, sum = 0; printf("1부터 n까지의 합을 구하기 위해 n을 입력하세요 "); scanf_s("%d", &i); for (n = 1; i >= n; n++) { sum += n; } printf("%d", sum); } 출력 1부터 n까지의 합을 구하기 위해 n을 입력하세요 5 15 2022. 1. 12.