[c언어 기초]

우리가 아는 C언어

상수와 변수

상수 그리고 변수

상수와 변수

컴퓨터는 빠르고 정확한 계산을 수행합니다. 따라서 수를 이용한 연산이 기본이죠, 프로그래밍 학습의 기본인 상수와 변수의 개념 그리고 그것의 의미와 특성에 대해 알아야 합니다.
 
아래의 코드를 직접 작성하고 실행해 봅시다.
#include <stdio.h>
main ()
{
    printf("5 * 4 - 10 = 10\n");
    int a=5, b=4, c=10;
    printf("%d * %d - %d = %d\n", a, b, c, a * b - c);
    a = a * b - c;
    printf ("a의 메모리 [%d] = %d\n", &a, a);
}

실행결과

위 코드를 실행하면 5*4-10의 연산 결과가 나옵니다.

(만약 사진이 보이지않는다면 새로고침 해주세요)

위의 코드를 처음 접할땐 이해하기 힘든것이 정상이며 정확하게 이해하기 위해선 상수와 변수에 대해 알아야 합니다.
  • 4행에서 말그대로 '5 * 4 – 10 = 10' 자체를 출력합니다. 또한 \n 은 줄 바꿈을 의미하고요.(Enter의 줄 바꿈과 동일합니다. )
  • 5행에서 a,b,c를 각각 5,4,10으로 ‘대입’합니다.
  • 6행에서 printf(“%d * %d %d = %d\n”, a, bc, a * b – c); %d는 a로  %d는 b로
    %d는 c로 %d는 a * b – c로 각각 대입 되어 출력 된것 입니다.
  • 7행에서 5인 a를 a * d – c로 대입 했습니다. (5에서 10이됨)
  • 8행에서 printf(“메모리[%d] = %d\n”, &a, a);로 &a는 a의 주소를 나타냅니다.
  • & – 변수 이름 앞에 &를 붙이면 그 변수의 주소를 나타냅니다. 예를 들어 변수 a의 값이 6이고 0001에 저장되어 있다면 &a의 값은 0001이 되는 거죠, 즉 &는 변수가 어디에 저장되어 있는지를 나타냅니다.

상수

위 프로그램과 같이 4, 5, 10과 같은 데이터를 직접 표현하거나 저장할 수 있고 4행과 5행의 4, 5, 10과 같이 수나 문자와 같은 값 자체를 상수(constant)라고 합니다.

상수의 종류

변수

위 프로그램의 a, d, c에는 수나 문자와 같은 값(상수)이 저장됩니다.
이처럼 언제든지 다른값을 저장할 수 있는 이름을 변수(variable)라고 합니다.
7행에서 a * b – c의 값으로 a의 값이 변경되는데, 이처럼 변수에 저장되는 값은 변경할 수 있습니다.
8행에서 변수 a가 사용하는 메모리 영역의 주소와 a 변수가 사용하는 주소에 저장되어 있는 값을 출력합니다.

또한 변수에 저장하는 값의 종류와 저장되는 범위(크기)에 따라 변수를 다르게 사용해야 하는데, 처음 변수를 지정하는 것을 변수의 선언이라고 합니다.

변수의 선언과 표현  (A는 값이 변할 수 있으므로  변수, A안의 1, 2, 3은 상수가 됩니다. )

'='와 '=='의 차이
등호(=)라고 알려진 연산자는 '같다'의 의미이지만, 우변의 값을 좌변에 '대입'하라는 의미도 있습니다. C언어에서는 이렇게 모호한 표현을 막기 위해 '대입'은 '=',  '같다'는 '=='로 표현합니다.

추가 - 변수의 종류(알아만 두자!)

변수는 값을 저장하기 위한 메모리(RAM)의 일부 공간입니다. 즉 변수로 지정된 이름은 특정 메모리 공간을 가리키며, 이 공간이 효율적으로 사용될 수 있도록 적당한 자료형으로 선언 되어야하죠.
메모리 - 컴퓨터는 변수의 각종 데이터들을 컴퓨터의 메모리, 즉 RAM 이라는 특별한 기억공간에 이를 기록합니다.

다음 토픽에서는 자료형에 대해 배워 봅시다.

댓글

댓글 본문
  1. #include <stdio.h?
    main ()
    {
    printf("5 * 4 - 10 = 10\n"); #\n = 줄바꿈 #그대로
    int a=5, b=4, c=10;
    printf("%d %d -%d = %\n", a, b, c, a * b -c); # 그대로
    a = a* b - c; # a= 5*4-10
    printf ("a의 메모리 [%d] = %d\n", &a, a);
    }
  2. 정현준
    ×=*이ㅠ별 모양이 곱하기 입니다만...
    대화보기
    • 정현준
      ×=*이거와 같습니다
    • 데자와
      선생님.. 코드가 잘 이해가지 않습니다. 그러면 5행의 a와 7행에서 a=a*b-c;의 좌변에 해당하는 a는 다른 값에 해당하는 건가요? 그리고 이 코드 전체가 그럼 5*4-10을 계산하는 코드인가요..?
    • 메이킷circuit두잇
      와우 어렵네용 그래도 뿌듯 ㅎㅎ
    • thebluerat
      감사합니다.
    • 아하! 감사합니다.
      main()을 사용하면 오류가 나고 int main(void)를 사용하면 안납니다!
      끝까지 공부해보고도 모르겠으면 다시 여쭙겠습니당
      대화보기
      • life knowledge
        아마 컴파일 프로그램의 차이 때문에 발생한 것 같습니다.
        int main()은 main 함수가 종료할 때(프로그램이 끝날 때) 정수형 값을 돌려보내겠다는 뜻입니다.
        main ()는 void main()과 같다고 생각하면 됩니다. 함수가 종료할 때 아무 값도 돌려보내지 않겠다는 뜻으로
        사실 아직은 매우 초반이기 때문에 신경 쓰지 않았던 게 오류가 발생할 줄 몰랐네요...

        int main (void)도 컴파일러에 따라서는 오류가 날 수 있기 때문에 int main()을 쓰고 코드의 아래에 return 0을 붙여주는 게 가장 좋습니다.

        제가 지금 6월에 시험이 있어서 활동을 못 하고 있습니다. (완전히 까먹고 있었어요. ㅠㅠ)
        return과 main 함수의 자세한 내용은 시험이 끝나게 되면 정리해서 올리고 아예 c언어 기초 토픽을 끝낼 예정입니다.
        그러니 조금만 자세한 내용은 조금만 기다려 주세요 ㅠㅠ
        대화보기
        • 뒤늦게 공부하며 잘 보고 있습니다.
          위의 코드를 작성해서 실행시키면 에러가 나지는 않지만 2행에서 경고가 하나 뜹니다.

          가르쳐주신대로 그냥 main()을 입력하면 경고가 나오고

          다른곳에서 찾아보니 main()함수를 int main (void) 라고 쓰길래 넣어봤더니 경고 없이 실행되어졌습니다.

          이 둘의 차이가 무엇인지 여쭤봐도 될까용..?
        • life knowledge
          코드블럭 오류인것 같습니다.
          만약
          #include <stdio.h>
          main ()
          {
          printf("5 * 4 - 10 = 10\n");
          }
          위 코드를 출력한다 했을 때

          \n(제어문자)이 맞는 표현이고 /n을 쓰게 되면 컴퓨터가 그대로 출력하게 됩니다.

          제어문자의 자세한 사항은 입력과 출력1 토픽에 있습니다.^^
          대화보기
          • 호러딸기
            처음 사진 코드를 복붙도 해봤고 직접 써보기도 했는데
            오류가 있었습니다.
            \n이 실행해보니 자연스럽게 /n 이 되어있어서코드블럭 에 오류가있는겄같은데
            혹시 댓글 작성 기준날짜로 c코드 같은게 바뀌었나요? 아님 코드블럭에 오류인가요?
          • 미니
            큰 도움이 되었어요~ 감사합니다!
          • 호두
            고맙습니다
          • 어흥zz
            감사합니다