C 언어 정리

Kail-KM
|2015. 8. 16. 13:35

#변수의 자료형

정수형 변수

실수형 변수


#대입연산자와 산술연산자

= +

- *

/ %


num+=1  //num=num+1


#증가,감소 연산자

++num --num

num++ num--


#관계 연산자

> <

>= <=

== !=


#논리연산자

&&:둘다참일떄 참반환

||:둘중하나참이면 참반환

! :A가 가짓이면 참반환.


#비트연산자

& : AND연산 // 두 비트가 모두 1일때 1일 반환

| : OR 연산 // 둘중 하나라도 1이면 1을 반환

^ : XOR 연산 // 두개가 서로 다를 경우에 1을 반환

~ : 비트반전시킴 // 0을 1로 반환, 1을 0으로 반환

<<: 비트 열의 좌이동 //num1<<2 2칸 왼쪽으로 이동

>>: 비트 열의 우이동 //num1>>2 2칸 오른쪽으로 이동


#정수의 표현방법

MSB(Most Significant Bit) : 부호를 나타낼떄 쓰인다.

0 0 0 0 0 0 0 0

맨앞이 MSB.


#자료형


정수형 char 1Byte

short 2Byte

int  4Byte

long 4Byte

long long 8Byte

실수형 float 4Byte

double 8Byte

long double 8Byte

****sizeof(int) sizeof(num1)

****scanf("%lf",&a);

double형 데이터를 입력받을때에는 서식문자 %lf를 사용


#unsigned 

unsigned가 붙으면 MSB 또한 범위를 나타내는 용도로 쓰이게 된다.


#ASCII Code

문자를 숫자로 표현하기 위하여 정의된 아스키 코드

//프로그램상에서의 문자표현은 ' '가 사용된다.

%c    %d

'A' = 65

'Z' = 90


#자료형의 변환

int num1 = 3;

double num2= 2.5*(double)num1;

...

#특수문자의 종류

\a :경고음

\b :백스페이스

\f :폼피드

\n :개행

\r :캐리지 리턴

\t :수평탭

\v :수직탭

\' :'출력

\" :"출력

\? :?출력

\\ :역슬래쉬출력


#서식문자의 종류와 의미

%d  : 부호있는 10진수

%ld : 부호있는 10진수

%lld: 부호있는 10진수

%u  : 부호없는 10진수

%o  : 부호없는 8진수

%x  : 부호없는 16진수

%f  : 10진수의 실수

%Lf : 10진수의 실수

%e  : e방식의 실수

%g  : 값에따라 %f, %e 사이에서 선택

%c  : 값에 대응하는 문자

%s  : 문자열

%p  : 포인터의 주소값

//%#o %#x로 출력할경우 07 0x07로 출력


#필드 폭 지정하여 출력하기

%8d : 필드 폭 8칸 확보하고 우정렬 하여 출력

%-8d: 필드 폭 8칸 확보하고 좌정렬 하여 출력



#반복문

while(조건식)

for(초기식;조건식;증감식)

#반복문의 생략과 탈출

continue : 뒤를 생략하고 다시 반복조건을 확인하러 간다.

break : 가장 가까이에 포함된 반복문을 빠져 나오게 된다.


#조건문

if..if..if

if..else if..else

//조건연산자

(조건) ? data1 : data2

num1>num2?num1:num2;

return a<b ?a:b;

#switch

switch(num)

{

case 1:

puts("1 = one");

break;

case 'a':

puts("a = A");

break;

default:

puts("I Don't Know..");

}

return 0;


#GOto문

if(n==1)

goto ONE;

...

ONE:

printf("input 1 \n");

goto END;

TWO:

printf("input 2 \n");

goto END;

OTHER:

printf("3 or other num..\n");

END:

return 0;


#함수 활용하기

   -인자0,반환0

int Add(int n1,int n2)

{

return n1+n2;

}

   -인자0,반환x

ShowAdd(int num)

{

printf("덧셈결과 : %d\n",num);

}

   -인자x,반환0

int Readnum()

{

int num;

scanf("%d",&num);

return num;

}

   -인자x.반환x

Howto()

{

puts("Explain...");

}


#지역변수

선언된 함수내에서만 접근이 가능

선언된 함수가 반환하면 지역변수와 마찬가지로 소멸.

중괄호내에서만 적용됨


반복문과 조건문에서 또한 선언가능

반복문에서 선언시 탈출과 진입을 여러번 반복한다.

그러므로 반복문내에서 초기화 할경우

반복 할때마다 초기화가 이루어진다.


#전역변수

지역변수와 동일한 이름으로 선언이 된다면?

 해당 지역내에서는 전역변수가 가려지고 지역변수로의 접근이 이루어짐

#Static변수

선언된 함수내에서만 접근이 가능

딱 1회 초기화되고 프로그램 종료시까지 메모리 공가에 존재.


static int num1=0;

*주로 반복문의 변수선언에 쓰면 적당.

탈출과 진입으로 인해 매번초기화되지않고 1회만 초기화되어

유지되기에.

#재귀함수

함수내에서 자신을 다시 호출하는 함수

Recursive()

{

printf("Test..\n");

Recursive();

}

:wq

Recursive(int num)

{

if(num<=0)

return;

printf("Call.. %d\n",num);

Recursive(num-1);

}

:wq


#1차원 배열

int arr[5]={1,2};

=>> 1 2 0 0 0

arrlen=sizeof(arr)/sizeof(int)


#문자열 변수표현

char str[14]="Good Morning!";

 NULL을 포함하여 14byte가 사용.

null='\0'

문자열을 입력받을때에는 배열의 이름앞에 '&'를 붙이면 안된다.

scanf함수호출을 통해서 입력받은 문자열의 끝에도 널문자가 삽입됨

C언어에서 표현하는 모든 문자열의 끝에는 널문자가 삽입됨.



#포인터

포인터변수란 메모리의 주소값을 저장하기 위한 변수이다.

int num;

int *pnum;

pnum=&num;


&num : 변수 num의 주소값

pnum = &num

pnum에는 num의 시작 주소가 위치하여 있다.


#포인터 &연산자와 *연산자

: 피연산자의 주소값을 반환하는 연산자

피연산자는 변수이여야하며, 상수는 피연산자가 될수없다.

: 포인터가 가리키는 메모리를 참조하는 연산자

*pnum=20;

pnum이 가리키는 메모리공간 변수num에 접근을하여...

사실상 *pnum은 변수num의 값을 의미하는것이다


#포인터와 배열의 관계

배열의 이름은 포인터이다.

arr= &arr[0]

arr[1] = *(arr+1) = *(ptr+1)

ptr[1] =  *(ptr+1)

>>>>[]와 * 둘중 하나라도 있다면 그것은 값을 나타낸다는 뜻이다.

포인터를 배열의 이름처럼 사용가능

int arr[i];

int *ptr;

ptr=arr; //ptr = &arr[0];

printf("%d\n",ptr[i]);

   ########## arr[i] = *(arr+i) ##### [] or * #############

*(ptr+0), *(ptr+1), *(ptr+2)

ptr[0]   ptr[1] ptr[2]

*(arr+0), *(arr+1), *(arr+2)

arr[0]   arr[1] arr[2]

열별로 모두 같은 값이다.

==========================================

#include <stdio.h>


main()

{

        int arr[6]={1,2,3,4,5,6};

        int *fp=&arr[0];

        int *bp=&arr[5];

        int i,temp;


        for(i=0;i<3;i++)

        {

                temp=*fp;

                *fp=*bp;

                *bp=temp;


                fp++;

                bp--;

        }

        for(i=0;i<6;i++)

        {

                printf("%d ",arr[i]);

        }

}

===========================================

#상수형태의 문자열을 가리키는 포인터

char str1[] = "My String"; //배열길이 자동계산

char *str2 = "Your String"; //문자열의 첫번째 주소값반환

str1 : 그자체로 문자열 전체를 저장하는 배열

str2 : 메모리상에 저장된 문자열의 첫번째 문자만 단순히 가리키고있음.


printf("Show your string");

printf(0x1234);

***""로 묶여서 표현되는 문자열은 그 형태에 상관없이 메모리 공간에 저장 된후 그 주소값이 반환된다.

그러므로 printf 함수는 문자열을 통째로 전달받는 함수가 아닌, 문자열의 주소값을 전달받는 함수이다.


#포인터배열

포인터배열 : 주소값의 저장이 가능한 배열

int *arr[3]={&n1,&n2,&n3};

printf("%d %d %d \n", *arr[0],*arr[1],*arr[2]);


[]와 *가 동시에 있다면 그것은 포인터배열이다.


#문자열을 저장하는 포인터배열

char *strarr[3]={"123","456","789"};

printf("%s",strarr[0]);

 

==char *strarr[3]={0x1004,0x1048,0x2012};