address

 

952

953

M

956

957

 

 

 

L

960

961

K

964

965

 

J

I

968

969

H

972

971

G

976

977

F

980

981

E

984

983

D

988

987

C

992

993

B

996

997

A

1000

1001

메모리 (4byte)

address


int A;   // 4byte
int B;   // 4byte
int C;   // 4byte
int D;   // 4byte
float E; // 4byte
float F; // 4byte
float G; // 4byte
float H; // 4byte
short I; // 2byte
char J;  // 1byte
int *K;  // 4byte
char L;  // 1byte
char *M; // 4byte                  

시작 주소가 4byte이기 때문에 






12345678이란 숫자가 있다고 치고 메모리를 보면

12

34

56

78

Little Endian ☜ 산술 연산이 빠름 (인텔CPU)[78563412 로 뒤짚어 저장]

78

56

34

12

Big Endian ☜ 논리 연산이 빠름

12

34

56

78

 

char A=-1;

1

1

1

1

1

1

1

1

char B=0xFF;

1

1

1

1

1

1

1

1

char C=255;

1

1

1

1

1

1

1

1

(signed) int D=C; (부호확장)

1

1

1

1

1

1

1

1

1

~

1

1

~

1

1

1

1

1

1

1

1

1

unsigned int E=C; (제로확장)

0

0

0

0

0

0

0

0

0

~

0

0

~

0

1

1

1

1

1

1

1

1


#include <stdio.h>

int main()
{
  int iNum; //
  int *ip1; ////
  int *ip2;
  
  iNum=100;
  ip1=&iNum; // 일반변수앞에 &를 붙이면 ip1과 같은 포인터변수로 선언된다.
  ip2=(int*)0XBFFFFBF8;
  //*iNum; 일반변수앞에는 *붙이면 오류가 뜬다.(다항연산자처리)
  *ip1; //포인터변수에는 붙여도 오류가 안뜸.(간접참조)
  
  printf("iNum value : %d\n", iNum);  
  printf("iNum address : %08X\n"&iNum);
  printf("ip1 value : %08X\n", ip1);
  printf("*ip1 value : %d\n", *ip1);
  printf("ip2 value : %08X\n", ip2);
  printf("*ip2 value : %d\n", *ip2);
  return 0;
}







































원하는 수의 소수를 출력하는 프로그램. 


포인터
변수의 값과 주소
컴파일러 ☜ 메모리주소를 할당해줌
%p ☜ 16진수표현으로 출력(리눅스)
모든 변수는 주소값을 가진다.

int *ip ☜ 여기서 *는 곱하기표시가 아니라 포인터라고하며 포인터typeip라고 한다.

포인터변수의 크기는 4바이트다. int  *ip 나 char  *cp나 float *xp나  4바이트라는 말이다.
이유는 주소를 저장하기 때문에 주소가 4바이트기에 4바이트를 사용한다.(컴퓨터의 비트에따라 달라짐)
int main()
{
  int num;
  num=0;
  while(num<=5)
  {
    printf("%d\t", num);
    num=num+1;
  }
  printf("\n");
}
int main()
{
  int num;
  for(num=0; num<=5; num++)
  {
    printf("d\t", num);
  }
  printf("\n");
}

왼쪽의 while 문을 오른쪽의 for문으로 고쳐서 쓸수 있다.

scanf, getchar, getche, getch ☜ 블로킹 함수
printf ☜ 논(non) 블로킹 함수
volatile ☜ 컴파일 최적화시 최적화를 하지 말라는 뜻.

for( ;  ; ) ☜ 초기값, 조건, 변수값  생략 가능 while(1) 과 같음  (무한반복)
for(i=0;  i<=1000; i++); ☜ for(i=0;  i<=1000; i++)  { } 같다. 3줄쓸것을 1줄로 줄일수있다.

#include <stdio.h>

int main()
{
  int itemp;
  int ifirst;

  for(ifirst=29>=ifirst; ifirst++)
  {
    for(itemp=1; itemp<=9; ++itemp)
    {
      printf("%d X %d = %d\n", ifirst, itemp, ifirst*itemp);
    }
  }
  return 0;
}
위의 프로그램은 2부터 9까지의 구구단을 모두 출력해준다.


#include <stdio.h>

int main()
{
  int itemp;
  int ifirst;
  int iend;

  printf("first number input : ");
  scanf("%d"&ifirst);
  printf("End number input : ");
  scanf("%d"&iend);

  for(ifirst; iend>=ifirst; ifirst++)
  {
    for(itemp=1; itemp<=9; ++itemp)
    {
      printf("%d X %d = %d\n", ifirst, itemp, ifirst*itemp);
    }
  }
  return 0;
}
위의 프로그램은 원하는 값을 입력하면 원하는 값의 전체를 출력해 준다.
2와 7을 입력하면 2~7단 모두를 출력해준다.


switch 문
switch (score)
{
case 10 :                  // 정수 10이 올 경우
grade='A';
break;          // switch 문 종료
case 9 :                   // 정수 9가 올 경우
grade='B';
break;
     ↓
     ↓
default :                     // 해당사항 없을 경우
grade='F';
break;
}     
스위치문에는 논리식을 쓸수 없다. 경우가 많을 경우에 if문보다 유용하다.
score 값이 10이면 10으로 점프 grade='A';실행하고 종료 9면 9로 점프 해당사항이없다면 default로 간다.

getchar / putchar 문
#include <stdio.h>

int main ()
{
  char ch;

  printf("Please enter any character: ");
  ch=getchar();  // 문자입력 (1byte)
  putchar(ch);   // 문자출력

  printf(" is a letter you typed.\n");
  fflush(stdin); // 버퍼에 입력된 엔터키를 삭제 (리눅스에서는 안됨)
  printf("Please enter any character: ");
  scanf("%c"&ch);
  printf("%c is a letter you typed.\n", ch);
  
  return 0;
}

fflush(stdin);은 윈도우에서는 되지만 리눅스에서는 안된다. 리눅스에서는 getchar();를
대신 써주면 된다.
getchar()함수는 버퍼를 통해 입력을 받는다.(ANSI C 표준)
getche()함수는 버퍼를 통하지 않고 입력을 받는다. (윈도우 o 리눅스 x)
getch()함수는 getche함수와 같으나 입력값을 화면에는 표시해주지 않는다. 
(윈도우 o 리눅스 x)

while(논리식) 명령문 
#include <stdio.h>

int main ()
{
  int num;
  
  num=0;          // 제어변수 n의 초기화
  while(num<=5)      // 반복여부를 결정하는 논리식(참이면 {}안 계속 반복 실행.)
  {
    printf("%d\t", num);
    num=num+1;      // 제어변수의 값의 변경
  }
  printf("\n");
  return 0;
  
}
반복 제어문으로써 논리식이 참인동안 {}안의 프로그램을 계속해서 반복한다. 거짓일경우 빠져나옴
변수 num의 값이 5보다 클때까지 계속 {}를 실행함.
프로그램 실행시 출력값은 0  1  2  3  4  5 가 나온다. 

+ Recent posts