1. 1바이트 = 8비트 (헤깔린다. 바이트(3자), 비트(2자) 따라서 바이트가 더 크다고 외우자. ㅋ)

2. &val : 주소값을 던져서 val 에 대입하라



3. int a=1 : 메모리에 int형(4바이트) 공간을 확보한후 1을 할당하고 a 라는 이름을 준다.

4. 숫자 0 (거짓) 을 제외한 나머지 숫자는 True 로 인식한다.

5. 컴퓨터는 내부적으로 int형 연산을 가장 빠르게 처리

6.실수형 자료형 double 형은 소수점 오차범위 15자리로 float 보다 double(오차범위 6자리) 사용을 권함

7. 데이타 표현범위







8. 상수는 선언과 동시에 초기화 해주어야 한다.
const int a = 1;

잘못된예 : const int a; a = 1;

위코드는 에러를 발생한다. int a 선언시 쓰레기값으로 초기화됨. 이후 상수값을 변경하려고 하므로 오류발생

9. 자동형변환
double e1 = 5.5 + 7;  // double + int
double 형과 int 형 연산시 데이타손실을 최소화 하도록 형변환됨 . 따라서 7 (int) 이 7.0 (double)  으로 자동 형변환 됨

10. 강제형변환 적용전

int a = 1;
int b = 2;

float c = a/b;

c = 0;

설명 : int a 와 int b 를 연산하면 결과값이 int 형으로 나옴 . 따라서 0.5가 int 형으로 변환되어 결과값 0 이 나옴

강제형변환 적용후

float c = (float)a/b

c = 0.5

설명 : a가 형변환되어 1.0 (float) 으로 변환됨. b는 데이타의 손실을 최소화 하도록 형변환 되므로 float 형으로 자동 형변환됨. 따라서 float/float 는 float  형으로 결과값이 나옴.  

11.서식문자



12. 함수


원형선언 : object - c 의 h 파일에 선언된 함수
함수정의 : object - c 의 m 파일에 정의된 함수

13. static 변수 : 함수내부및 외부에서 선언가능하며 한번만 초기화 된다.

void fct(void);

int main(void)

{

    int i;

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

          fct();

    return 0;

}

void fct(void)

{

    int val=0;  //static int val=0;

    val++;

    printf("%d ",val);

}


실행결과

1

1

1

1

1


-------------------------------------------------------------


void fct(void);

int main(void)

{

     int i;

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

          fct();

     return 0;

}

void fct(void)

{

     static int val=0;

     val++;

     printf("%d ",val);

}


실행결과

1

2

3

4

5


14. 재귀함수 를 사용하는 이유 - 자료구조, 알고리즘 문제해결을 위해서


15. 매크로 함수 정의시 앞뒤로 () 반드시 표시해줄것 


 #define cal ((3*4)+(12/4))


16. 구조체 typedef


 typedef struct Data{

 int data1;

 int data2;

} Data;


struct Data data


17. int array[10] : int형 데이타를 10개 저장할수 있는 메모리 공간을 할당하고 이름을 array 로 붙여줘라.


배열초기화 


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

int arr2[ ]={1, 3, 5, 7, 9};

int arr3[5]={1, 2}


18. 문자열 상수, 변수


- 문자열 상수 : printf("Hello World! \n"); 문자열 상수는 메모리의 주소값을 반환한다.

- 문자열 변수 : char str1[5] = "Good"; 문자열은 문자열의 끝을 표현하기위해 null 문자를 끝에 지닌다. [G],[o],[o],[d],[null]



19. 포인터


& 연산자 : 변수의 주소값반환

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


int main(void)

{

int n = 7;

int *pN = &n;

printf("%d",n);          // 7 - 직접접근

printf("%d", *pN);     // 7 - 간접접근 

}




20. * 연산자


 - 곱하기

 - 포인터 선언

 - 포인터가 가리키는 메모리 참조


21. 포인터에 타입이 존재하는 이유 : 포인터 타입은 참조할 메모리의 크기 정보를 제공 


포인터 = 주소값 + 자료형


22. 잘못된 포인터의 사용


int main(void)

{

   int *pA;  // pA는 쓰레기 값으로 초기화 됨

   *pA=10;

   return 0;

}


int main(void){

   int* pA=100;   // 100이 어딘 줄 알고???

   *pA=10;

   return 0;

 }


23. 배열과 포인터


배열 이름은 첫 번째 요소의 주소 값을 나타낸다. 

 


int main(void)

{

    int a[5]={0, 1, 2, 3, 4};

    int b=10;

    a=&b;   //a는 상수이므로 오류, a가 변수였다면 OK!

}


24. 포인터 연산


포인터가 가리키는 대상의 자료형에 따라서 증가 및 감소되는 값이 차이를 지님


int main(void)

{

    int* ptr1=0;                       // int* ptr1=NULL; 과 같은 문장

    char* ptr2=0;                    // char* ptr2=NULL; 과 같은 문장

    double* ptr3=0;                 // double* ptr3=NULL; 과 같은 문장

 

    printf("%d 번지, %d 번지, %d 번지 \n", ptr1++, ptr2++, ptr3++);              //0,0,0

    printf("%d 번지, %d 번지, %d 번지 \n", ptr1, ptr2, ptr3);                       //4,1,8

 

    return 0;

}


25 . 배열과 포인터




26. 문자열 표현 방식


배열기반의 문자열 변수 : char str1[5] = "abcd";

포인터 기반의 문자열 상수 : char* str2 = "ABCD";





27. 배열의 함수 인자 전달 방식


- 배열이름(포인터)에 의한 전달 (call by ref)


int main(void)

{

     int arr1[2]={1, 2};

 

     fct(arr1); //배열의 주소값을 던진다.

     printf("%d \n", arr1[0]);  //3이 출력된다.

     return 0;

} 


void fct(int *arr2) //주소값을 받기 위해 포인터로 받는다.

{

     printf("%d \n", arr2[0]); // *(arr2 + 0) 와 같음

     arr2[0]=3; // *(arr2 + 0) 와 같음

}


28.  "int * pArr" vs. "int pArr[ ]"


- 둘다 같은 의미를 지닌다.

선언 "int pArr[ ]"은 함수의 매개 변수 선언 시에만 사용 가능


int function(int pArr[]) {} == int function(int *pArr){}


29. const 키워드를 사용하는 이유 : 컴파일시 잘못된 연산에 대한 에러 메시지를 보여주기 위해서


30. 2차원 배열 int arr[3][4] : 3 = 세로, 4 = 가로 




31. 스트림 :파일, 콘솔, 소켓 의 데이타를 송.수신 하기위한 일종의 다리



32. -> pMan 이라는 포인터가 가리키는 대상의 멤버에 접근하라


struct person 

{

char name[20];

char phone[20];

}


int main()

{

struct person man = {"Thomas","000-000-0000"};

struct person * pMan;

pMan = &man;


//구조체 포인터를 이용한 출력

printf("name : %s\n", pMan->name);

printf("phone : %s\n", pMan->phone);


return 0;

}

+ Recent posts