'프로그래밍언어.Lib/C,C++'에 해당되는 글 141건

  1. 2016.04.15 8.2 구조체 필드의 초기화
  2. 2016.04.15 8.1 구조체의 정의
  3. 2016.04.15 6.5 문자열과 포인터
  4. 2016.04.15 6.4 배열과 포인터
  5. 2016.04.15 6.1 포인터 개요
  6. 2016.04.11 5장 연습문제
  7. 2016.04.11 C언어의 문자열
  8. 2016.04.04 조건문 예제 2
  9. 2016.04.04 콤마(,) 연산자
  10. 2016.04.04 sizeof 연산자

8.2 구조체 필드의 초기화     [gdoc]     [smts]

 구조체를 초기화하는 방법은 선언과 동시에 초기화하는 방법과 이미 선언된 구조체를 초기화시키는 방법 두 가지가 있다. 선언과 동시에 초기화하는 예를 들면 다음과 같다.


ex08-01

#include <stdio.h>

typedef struct {
double x;
double y;
} Point;

int main(int argc, char **argv) {
Point a = {1.0, 1.0}; //<--
}

이렇게 Point타입으로 a란 변수를 만들면서 해당하는 값을 바로 넣어주는 방법을 사용할 수 있으며 이 방법을 사용할 때에는 해당 구조체의 멤버변수 순서와 같은 차례로 초기값을 넣어야 한다.

 구조체 변수를 먼저 선언하고 나중에 필드를 초기화시키는 방법도 있다. 같은 예를 들면 다음과 같다.


ex08-02

#include <stdio.h>

typedef struct {
double x;
double y;
} Point;

int main(int argc, char **argv) {
   Point a;
   a.x = 1.0; //<--
   a.y = 1.0; //<--
}

여기서 a.x는 a라는 구조체 변수의 필드 x를 나타낸다. a.y는 필드 y를 나타낸다. 이와 같이 구조체 변수의 필드는 점(.)으로 구분하여 접근한다.


 다른 예로 Person이라는 구조체를 작성해 보자. 필드로는 나이와 키 그리고 이름 정보를 가지고 있어야 한다..


ex08-03.c
#include <stdio.h>

typedef struct {
char strName[10];
int iAge;
float fHeight;
} Person;

int main(int argc, char **argv) {
Person park = {"salesio", 45, 171.5};
Person jang = {"sophia", 45, 165.0};
printf("name:%s, age:%d, height:%.1f\n",
             park.strName, park.iAge, park.fHeight);
printf("name:%s, age:%d, height:%.1f\n",
             jang.strName, jang.iAge, jang.fHeight);
}
실행 결과
name:salesio, age:45, height:171.5
name:sophia, age:45, height:165.0

이 예에서 Person구조체의 필드는 세 개로 strName, iAge, fHeight 이고 각각 문자열 변수, 정수형 변수, 실수형 변수이다. park과 jang이라는 Person 구조체 변수를 생성한 뒤 각각의 필드를 출력하는 예제이다.


   같은 구조체형이라면 대입연산자 =를 이용해서 모든 멤버변수의 값을 복사할 수 있다. 즉, 다른 구조체 변수의 필드값으로 새로운 구조체 변수의 필드를 초기화할 수 있다. 앞에서 예를 든 Point 구조체를 이용하여 예를 들어보자.


ex08-04.c

#include <stdio.h>

typedef struct {
double x;
double y;
} Point;

int main(int argc, char **argv) {
Point a = {1.1, 1.2};
Point b = a; // a를 이용하여 b를 초기화
Point c = b; // b를 이용하여 c를 초기화
c.y = 2.0;
printf("a = {%f, %f}\n", a.x, a.y);
printf("b = {%f, %f}\n", b.x, b.y);
printf("c = {%f, %f}\n", c.x, c.y);
}

실행 결과

a = {1.100000, 1.200000}
b = {1.100000, 1.200000}
c = {1.100000, 2.000000}

위에서 Point변수 c는 필드 y가 2.0으로 변경되었으며 출력 결과에 그것이 반영되어 있음을 알 수 있다.


Posted by 살레시오
,

8.1 구조체 정의     [gdoc]     [smts]

 지금까지 C언어가 제공하는 여러 타입의 데이터를 써왔다. char, int, float 등의 기본 자료형  변수에는 하나의 데이터만 담을 수 있다. 어떤 대상이 여러 종류의 데이터를 가져야 하는 경우에는 구조체를 사용하는데 구조체는 단일 변수들을 묶어서 하나의 이름으로 관리할 수 있는 방법을 제공한다. 예를 들어 어떤 회사원의 정보를 저장하려면 이름도 필요하고 생년월일이나 주소, 사번 등등 많은 요소가 그 한사람에 관련된 정보가 될 것이다. 이들 요소를 모두 따로 만들어도 나타내는 일이 가능은 하지만 한 이름으로 모든 요소를 관리하면 효율적일 것이다. 즉, 구조체는 간단히 말해서 변수들의 모임이라고 할 수 있다. 변수들의 모임이라는 점에서 배열과 유사한 점이 있지만 배열은 같은 형의 데이터들의 모임이고 구조체는 서로 다른 형의 데이터들의 모임이라고 생각하면 된다.


 예를 들어 점의 좌표 정보를 갖고 있는 구조체를 작성해 보자. 좌표는 x값과 y값을 가진다. 구조체는 struct 이라는 키워드를 이용하여 선언한다.


struct {
   double x;
   double y;
};

이것은 double형 변수 x와 double형 변수 y를 갖는 구조체를 선언한 것이다. x와 y를 구조체의 필드(field)라고 한다.


 하지만 이것만으로는 이 구조체를 이용하여 데이터(변수)를 생성할 수 없다. 이 구조체를 이용하여 변수를 생성하려면 이 구조체에 이름을 지정해주어야 한다. 이를 위해서 보통  typedef 명령과 조합하여 구조체를 정의하는 방법이 많이 사용된다. typedef는 전에도 나왔지만 새로운 변수형을 선언하는 명령이다. 다음 예를 보자.


typedef struct {
   double x;
   double y;
} Point;

이와 같이 작성하면 struct {,,,} 구조체를 Point라는 이름으로 정의한 새로운 자료형이 생긴 것과 같이 쓸 수 있다. 그리고 이후로는 Point란 이름으로 변수를 선언할 수 있다.


Point a, b;


이렇게 하면 변수 a와 b는 구조체인 Point 변수이며 각각 별도의 필드 x와 y를 갖는다.


'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글

8.3 구조체를 함수의 인자로 넘기기  (0) 2016.04.15
8.2 구조체 필드의 초기화  (0) 2016.04.15
6.5 문자열과 포인터  (0) 2016.04.15
6.4 배열과 포인터  (0) 2016.04.15
6.1 포인터 개요  (0) 2016.04.15
Posted by 살레시오
,

6.5 문자열과 포인터     [doc]     [smts]

 문자열의 이름은 사실은 포인터로서 문자열의 첫 문자가 저장되는 주소값(이것을 base address라고 한다.)을 가진다. 문자열은 다음과 같이 정의할 수 있다.


char str[6] = {‘h’,’e’,’l’,’l’,’o’,’\0’}; // 문자 배열

char str[] = “hello”; //(1) 초기화할 경우 일차 배열의 크기를 생략할 수 있다.

char *str = “hello”; //(2) 윗 줄과 완전히 동일하다.


위의 예에서 (1)과 (2)는 동일하며 str 이라는 문자열 이름은 “hello” 문자열의 첫 문자 ‘h’가 저장된 메모리의 주소이다. 따라서 다음과 같은 것들이 가능하다.


str[0] 은 *(str+0) 와 같고(혹은 *str) 문자 ‘h’이다.

str[1] 은 *(str+1) 와 같고 문자 ‘h’이다.

str[2] 은 *(str+2) 와 같고 문자 ‘e’이다.

….

str[4] 은 *(str+4) 와 같고 문자 ‘o’이다.

str[5] 은 *(str+5) 와 같고 널문자(‘\0’)’이다.


따라서 다음과 같은 연산도 가능하다.


char ca = *str; // char ca = str[0] 과 같다.

str[0] = ‘H’; // 첫 문자를 대문자 ‘H’로 바꾼다.

printf(“%s”, str); // “hello” 가 출력된다.

printf(“%s”, str+1); // “ello” 가 출력된다.


문자열변수에 다른 변수를 대입하는 것도 물론 가능하다.


char *s1=”Hello world.”, *s2;

s2 = s1+6;

printf(“%s”, s2);


이 프로그램을 실행시키면 “world”라고 출력될 것이다. 포인터 s2 는 ‘w’를 가리키고 있기 때문이다.



H

e

l

l

o


w

o

r

l

d

\0

offset

0

1

2

3

4

5

6

7

8

9

10

11


이와 같이 문자열 변수는 사실  char형 포인터이고 문자열의 첫 문자가 저장된 곳의 주소라는 사실을 잘 이해해야 한다.


'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글

8.2 구조체 필드의 초기화  (0) 2016.04.15
8.1 구조체의 정의  (0) 2016.04.15
6.4 배열과 포인터  (0) 2016.04.15
6.1 포인터 개요  (0) 2016.04.15
5장 연습문제  (0) 2016.04.11
Posted by 살레시오
,

6.4 배열과 포인터     [doc]     [smts]

 포인터와 배열은 깊은 관계가 있는데 사실 배열의 이름이 바로 포인터이다. 다음 예를 보자.


0603-01.c

#include <stdio.h>

int main()

{

  int iaa[] = {11,22,33,44,55};

  int ib = 4;

  printf("iaa : %p\n", iaa); //(1)

  printf("*iaa : %d\n", *iaa); //(2)

  printf("*(iaa+ib) : %d\n", *(iaa+ib)); //(3)

  printf("iaa[ib] : %d\n", iaa[ib]); //(4)

}


iaa : 0028ff08

*iaa : 11

*(iaa+ib) : 55

iaa[ib] : 55


이 예에서 (1)의 결과 를 보면 포인터(주소)값이 찍히는 것을 알 수 있으며 (2), (3), (4)의 결과를 보면 배열명은 내부적으로 배열의 첫 번째 요소의 포인터(주소)임을 알 수 있다. 그래서 배열의 첫 번째 요소를 참조하는 다음 표현식은 모두 같은 것들이다.


  • *iaa

  • *(iaa + 0)

  • iaaa[0]


마찬가지로 배열의 5번째 요소는


  • iaa[5]

  • *(iaa+5)


로 표현할 수 있다.

또 다른 예를 보자.


0603-02.c

#include <stdio.h>

int main() {

   int iaa[] = {11,22,33,44,55};

   int *ip = iaa;

   for(int k=0; k<5; k++){

       printf("iaa[%d]:%d, ", k, ip[k]);  //(1)

   }

   printf("\n");


   for(int k=0; k<5; k++){

       printf("iaa[%d]:%d, ", k, *(ip+k)); //(2)

   }

   printf("\n");


   for(int k=0; k<5; k++){

       printf("iaa[%d]:%d, ", k, *(ip++)); //(3)

   }

}


iaa[0]:11, iaa[1]:22, iaa[2]:33, iaa[3]:44, iaa[4]:55,

iaa[0]:11, iaa[1]:22, iaa[2]:33, iaa[3]:44, iaa[4]:55,

iaa[0]:11, iaa[1]:22, iaa[2]:33, iaa[3]:44, iaa[4]:55,


여기서 (1)과 (2)는 완전히 같은 코드이다. 즉 ip[k] 와 *(ip+k)는 완전히 동일한 표현식이다. 하지만 (3)에서는 앞의 경우들과 달리 ip값이 직접 증가하여 변한다는 점이 다르다. 하지만 배열명에 정수를 더하거나 뺄 수 없다. 즉 iaa++, --iaa 과 같은 표현식은 에러를 발생시킨다. 배열 포인터를 직접 증감시킬 수 없으므로 다른 포인터를 변열 명으로 초기화 한 후 그 포인터를 조작해야 한다.


 배열과 포인터의 차이점을 요약하면 다음과 같다.


  • 배열은 메모리가 자동으로 생성되지만 포인터는 메모리를 할당해야 한다.

  • 배열은 주소 이동이 불가능하지만 포인터는 가능하다.

  • 배열은 크기가 ‘데이터형×배열크기’ 이지만 포인터는 2 또는 4바이트이다.


‘배열명은 첫 번째 요소의 포인터값을 갖는 상수’라는 사실은 확실히 알아두어야 한다.


'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글

8.1 구조체의 정의  (0) 2016.04.15
6.5 문자열과 포인터  (0) 2016.04.15
6.1 포인터 개요  (0) 2016.04.15
5장 연습문제  (0) 2016.04.11
C언어의 문자열  (0) 2016.04.11
Posted by 살레시오
,

6.1 포인터 개요     [doc]     [smts]

 포인터(pointer)는 무엇인가를 가리키고 있는 것이라는 뜻인데 C 언어에서 포인터는 ‘메모리 주소(memory address)’를 지칭한다. 변수를 선언하면 메모리 공간 어디엔가 그 변수값을 저장하기 위한 기억 공간이 할당되는데 포인터는 그 메모리 공간의 주소값을 가진다. 즉 변수값이 존재하는 물리적인 위치 정보인 것이다.


 포인터를 설명하기 앞서서 메모리에 대한 개념적인 설명을 먼저 할 필요가 있다. PC와 같은 디지털 시스템은 메모리(memory)소자가 있어서 여기에 자료를 저장한다. 자료 저장 단위가 8bit 라면 ‘8bit 메모리’, 16bit 라면 “16bit메모리”라고 한다. 8비트 메모리는 매 바이트에 고유의 주소가 정해져 있어서 그 주소를 이용하여 데이터에 접근한다.


[그림 6.1.1[ 8비트 메모리 구조


만약 어떤  변수를 선언하면 내부적으로 변수 값을 저장할 연속된 메모리 공간이 할당되는데 전술한 바와 같이 메모리 공간에는 고유의 주소값이 있다. 그 주소를 포인터라고 한다.


int a = 11;

변수명

a

주소

0x12345678

메모리

0

0

0

11

[그림 6.1.2] 포인터 개념도


즉, 변수를 선언하면 메모리, 주소, 그리고 자료를 참조할 이름(변수명) 이 세가지가 생성이 된다.


 포인터를 사용하는 경우는 여러 가지가 있으나 보통은 다음 두 가지 이유 때문이다.


  1. 어떤 함수 내부에서 다른 함수의 변수값을 직접 변경시켜야 될 경우에 사용될 수 있다. 변수값이 아니라 주소값을 인자로 넘겨서 그 주소에 저장된 데이터를 직접 변경시키는 것이다.

  2. 복잡한 구조를 가지는 배열이나 구조체를 함수의 인자로 넘겨줄 경우 보통의 값에 의한 호출(즉, 복사한 후 복사본을 넘겨주는)방식이 사용될 경우 데이터형을 전달하기도 힘들뿐더러 메모리 낭비 및 비효율성으로 인한 속도 저하를 가져올 수 있다. 이럴 경우 포인터를 넘겨주는 방법을 사용한다.


 포인터의 다양한 쓰임새 때문에 C 언어에는 관련된 많은 기능을 제공하고 있지만 편리한 만큼 위험부담도 있다. 경우에 따라서 매우 잡기 힘든 버그를 생산하기도 하고 심지어 프로그램이 멈춰서 복구 불능이 되는 경우도 포인터 때문에 발생하기도 한다. 따라서 사용자는 사용법을 정확히 알고 주의해서 사용해야 한다.


'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글

6.5 문자열과 포인터  (0) 2016.04.15
6.4 배열과 포인터  (0) 2016.04.15
5장 연습문제  (0) 2016.04.11
C언어의 문자열  (0) 2016.04.11
조건문 예제 2  (0) 2016.04.04
Posted by 살레시오
,

5장 연습문제     [doc]     [smts]


pb05-01 실수 0.1부터 2.0까지 0.1 크기로 증가하면서 순서대로 배열에 저장하는 프로그램을 작성하라. 즉 double형 배열에 0.1, 0.2, 0.3, ... 1.9, 2.0 이 저장되어야 한다.


pb05-02 양의 홀수 50개를 배열에 순서대로 저장하는 프로그램을 작성하라.


pb05-03 소수 (prime number) 100개를 순서대로 배열에 저장하는 프로그램을 작성하라.


pb05-04 크기가 10인 int형 배열이 있다고 가정하자. 이 배열의 0번 요소를 1번 자리로, 1번 요소는 2번 자리로 ... 이런식으로 8번 요소는 0번 자리로, 9번 요소는 0번자리로 값의 위치를 하나씩 밀어내는 프로그램을 작성하라.


pb05-05 사용자로부터 일곱 개의 정수를 입력 받아 배열에 저장한 후 그것을 크기 순으로 정렬하여 다른 배열에 저장하는 프로그램을 작성하라.



'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글

6.4 배열과 포인터  (0) 2016.04.15
6.1 포인터 개요  (0) 2016.04.15
C언어의 문자열  (0) 2016.04.11
조건문 예제 2  (0) 2016.04.04
콤마(,) 연산자  (0) 2016.04.04
Posted by 살레시오
,

5.6 C언어의 문자열    [doc]     [smts]

 C언어에서는 char형 배열로서 단어나 문장 같은 문자열(string)을 처리하는데 사용된다. 일반적인 배열과 다른 점은 문자열의 맨 마지막에는 ‘\0’문자가 들어가야 한다는 것이다. 이것은 널(null)문자라고 하며 ASCII 코드값은 0이다. 문자열의 끝에 널문자를 삽입하는 것은 문자열이 어디에서 끝나는지를 명시적으로 표시하기 위해서이다.


다음의 예제를 보자.


0503-01.c

#include <stdio.h>

int main(void) {

char str1[] = {'H', 'e', 'l', 'l', 'o', '\0'};//❶

char str2[] = "there"; //❷

printf("%s %s\n", str1, str2);

}


실행 결과 :

Hello there


위의 예제에서 ❶에서 보면 char형 배열을 초기화할 때 일반적인 배열의 초기화 방법에 따르고 있다. 이런 식으로 문자열을 초기화한다며 맨 마지막 요소로 널문자를 사용자가 명시적으로 첨가해야 한다.. 그리고 ❷를 보면 문자열을 초기화하는 두 번째 방법이 나와 있는데 그것은 큰따옴표로 단어나 문장을 묶는 것이다. 이 경우에는 맨 마지막의 널문자을 생략할 수 있는데 컴파일러가 자동으로 널문자를 삽입해 준다. 두 번째 방법이 훨씬 간결하기 때문에 문자열을 초기화할 때는 보통 이 방법을 쓴다.


 출력 함수인 printf()에서 문자열을 표시하는 제어문자는 %s이다. 이 제어문자를 만나면 해당 문자열을 널문자가 나올 때까지 화면에 표시하게 된다.


'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글

6.1 포인터 개요  (0) 2016.04.15
5장 연습문제  (0) 2016.04.11
조건문 예제 2  (0) 2016.04.04
콤마(,) 연산자  (0) 2016.04.04
sizeof 연산자  (0) 2016.04.04
Posted by 살레시오
,

4.1.2 조건문을 사용한 예제 2    [doc]    [smts]

전 절의 예제와 약간 다른 다음 문제를 풀어보도록 하겠다..


2. 세 개의 float 형 숫자를 사용자에게 입력 받아서 가운데 수를 출력하는 프로그램을 작성하라.


 이 문제는 앞의 문제보다는 한 번 더 생각해야 한다. 여기서도 세 float형 변수를  f1, f2, f3 라고 하고 결과값(중간 수)를 저장하는 변수를 fMid 라고 하고 임시값을 저장하는 변수명을 fTmp라고 하자. (Tmp는 temporary 를 줄인 단어임) 알고리듬은 다음과 같이 생각해 볼 수 있다.


(a) f1과 f2 중 작은 수를 fMid 에 저장하고 큰 수를 fTmp에 저장한다.

(b) f3가 fMid보다 크다면 현재 fMid 값이 최소값이라는 의미다. 따라서 f3와 fTmp중 작은 것이 중간값이므로 그것을 fMid에 저장한다.

(c) f3가 fMid 보다 작다면 (a)에서 구한 fMid 값이 중간값이다.

(d) fMid를 출력한다.


 이제 이 알고리듬을 프로그램으로 작성해 보면 다음과 같다.


ex04-07.c
#include  <stdio.h>
int main() {
float f1, f2, f3;
printf("Input three numbers : ");
scanf("%f,%f,%f", &f1, &f2, &f3);
float fMid, fTmp;
if (f1>f2) { // 알고리듬 (a)를 구현한 것임
fMid = f2;
fTmp = f1;
} else {
fMid = f1;
fTmp = f2;
}
if (f3 > fMid) // (b)를 구현한 것임
fMid = (f3>fTmp)? fTmp:f3;
printf("The middle value is %f.", fMid);
}


위에서 보면 알고리듬 (c)가 성립한다면 두 번째 if 문이 실행되지 않고 바로 printf()문이 실행이 되므로 올바르게 작동하는 것을 이해할 수 있을 것이다. 실행 예는 다음과 같다.


Input three numbers : -11,22.5,100.345
The middle value is 22.500000.

'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글

5장 연습문제  (0) 2016.04.11
C언어의 문자열  (0) 2016.04.11
콤마(,) 연산자  (0) 2016.04.04
sizeof 연산자  (0) 2016.04.04
1장 연습문제  (0) 2016.03.28
Posted by 살레시오
,

3.11 콤마(,) 연산자    [doc]    [smts]

 콤마(.)도 C 언어의 연산자인데 피연산자 두 개를 받는 이항 연산자이다. 이 연산자는 첫 번째 식을 구한 다음 그것은 버린다. 그리고 두 번째 연산을 수행하여 그 결과값을 반환한다. 쉼표 연산자는 우선 순위가 가장 낮기 때문에 먼저 수행하려면 괄호를사용해야 한다. 예를 들어 보자.


0311-01.c
#include <stdio.h>
int main() {
   int ia=1, ib=2, ic, id, ie;

   ic = (ia, ib); //(a)
   id = ia, ib; //(b)
   ie = (ia, ib, ic); //(c)

   printf("ic:%d\n", ic);
   printf("id:%d\n", id);
   printf("ie:%d\n", ie);
}
실행 결과
ic:2
id:1
ie:2

위에서 (a)는 괄호안의 콤마연산자를 먼저 수행하므로 ib값을 반환하여 그것이 ic에 저장된다. (b)는 id에 ia값이 저장된다. 왜냐면 콤마 연산자는 대입연산자보다 우선 순위가 낮아서 다음과 같기 때문이다.


id = ia, ib; // (b)

(id = ia), ib;


따라서 id=ia 가 먼저 수행되고 ib값이 구해지지만 그 뒤에 아무 동작이 일어나지 않는다. (c)는 콤마 연산자의 결합 방향에 의해서 다음과 같다.


ie = ( ia, (ib, ic) );

따라서 ie에는 ic값이 저장된다.


 콤마 연산자는 두 개의 표현식을 하나로 줄일 때 주로 사용된다.


// 두 개의 표현식

ia++;

ib++;


//콤마 연산자를 이용한 하나의 표현식

ia++, ib++;


또한,  만약 두 개의 대입문을 하나로 줄이고 싶다면 다음과 같이 하면 되지만 이런 식으로는 잘 사용되지 않는다.


ia = 1;
ib = 2;

ib = (ia=1, 2);

콤마 연산자는 나중에 소개될 for문의 갱신식에서 여러개의 변수를 동시에 변경시킬 때 많이 사용된다.


'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글

C언어의 문자열  (0) 2016.04.11
조건문 예제 2  (0) 2016.04.04
sizeof 연산자  (0) 2016.04.04
1장 연습문제  (0) 2016.03.28
2.7 논리형(bool형)  (0) 2016.03.28
Posted by 살레시오
,

3.10 sizeof 연산자    [doc]    [smts]

 연산자 sizeof 은 한 개의 피연산자를 갖는 단항 연산자로서 데이터의 바이트 수를 정수로 구하는 기능을 한다. 다른 연산자가 대부분 특수한 기호로 되어 있는 반면 sizeof  연산자는 식별자의 모양을 가지고 있어서 함수나 매크로가 아닐까 오해하기 쉽지만 엄연히 기본 연산자이고 따라서 이것을 사용하기 위해서 어떠한 헤더 파일을 인클루드할 필요가 없다. 예를 들어 int 자료형의 바이트수를 구하고 싶다면 다음과 같이 하면 된다.


sizeof(int);

혹은 생성된 변수의 자료형도 구할 수 있다.


double da = 1.1;
int ia = sizeof(da);

이 연산자를 이용하면 뒤에 나올 enum, struct, union 같은 자료형의 바이트수도 쉽게 구할 수 있다.


0310-01.c

#include <stdio.h>
int main() {
   //자료형의 바이트수 구하기
   printf("int : %d bytes\n", sizeof(int));
   printf("long long : %d bytes\n", sizeof(long long));

   // 변수의 바이트 수 구하기
   long double lda = 0;
   long la = 11;
   printf("lda : %d bytes\n", sizeof(lda) );
   printf("la : %d bytes\n", sizeof(la) );
}

실행 결과

int : 4 bytes
long long : 8 bytes
lda : 16 bytes
la : 4 bytes

 sizeof 연산자는 메모리를 할당하는 malloc(), calloc() 함수와 같이 사용되어 할당될 메모리의 크기를 지정하는데 주로 사용된다.


'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글

조건문 예제 2  (0) 2016.04.04
콤마(,) 연산자  (0) 2016.04.04
1장 연습문제  (0) 2016.03.28
2.7 논리형(bool형)  (0) 2016.03.28
2.6 문자 상수  (0) 2016.03.28
Posted by 살레시오
,