Language/C C언어 강좌 (const/함수포인터/배열/배열의 선언과 사용/배열의 초기화/배열과 포인터)
  • 728x90
    반응형

     

     

     

    C언어 Chapter 18.


     

     

    함수 포인터

    • 같은 형식의 "ABCDEF" 문자 배열이면 변수가 달라도 같은 주소값을 쓴다.

    char word[] = "ABCDEF";

     

    • 위와 같이 배열의 수를 적지 않는 경우 자동으로 오른쪽값을 세어준다. (NULL을 포함해 7byte)
    • (" ") 는 printf에서 인자 이며 주소값을 가지는 Read만 가능한 상수이다.

     

    📌 상수(변하지않는 수) 선언

    const char a;

     

     

    🔔 예) printf 함수의 진실

     

    🎯 프로그램 설명

    • 지금까지 써왔던 printf 의 (" ")는 상수 이며 그 주소값에서 Read하여 사용하고 있었음을 의미한다.

    (printf, scanf) (const char *, ...) = ("")

     

     

    • 같은 문자열일경우 같은 변수가 다르더라도 같은 주소값을 사용한다.
    • 변수 c1, c2 는 같은 "ABCDEF" 일경우 주소 같은 아래와같이 동등하다.

    "0804574"

     

    결과 : C는 모든 것이 주소 기반이다.

     

     

    🔔 예) printf 의 주소 값으로 포인터를 사용해 printf에 접근사용

     

    🎯 프로그램 설명

    • inum 주소값(BFFFF9B8)으로 캐스팅 포인터로 직접 접근하여 100을 99로 수정
    • 08048300 = printf 주소값

    ((int(*)(const char *, ...))0x08048300)

     

    • printf포인터 원형에 주소값을 넣어 printf 에 직접 접근

     

    결과

     

     

     

    배열의 선언과 사용

    • 배열은 의미상의 연관이 있는 다수의 데이터를 사용자가 묶어서 하나의 자료형으로 정의한 것.
    • 배열의 선언의 형식

    자료형 배열명[크기];

     

    • 50개 일경우

    int score[50];

     

     

     

    • 배열의 색인은 항상 0부터 시작된다. 따라서 50개 원소를 선언하면 배열의 마지막 원소의 색인은 49가 된다.
    • 배열의 각 원소는 하나의 독립된 int형 변수와 같은 방법으로 사용된다.

     

    🔔 예) 10명 학생의 시험 성적의 평균값을 배열을 사용해서 계산하는 프로그램

     

    🎯 프로그램 설명

    • score[i] 배열의 색인으로 정수형 변수를 사용할 수 있다.
    • 아래와 같이 색인을 산술식으로 명시할 수 있다.

    score[i + 3]

     

    결과 : 독립된 10개의 변수를 사용하는 것에 비해 10개의 원소를 일괄적으로 처리할 수 있는 배열의 장점이다.

     

     

     

    배열의 초기화

    • 배열도 선언과 동시에 초기화할 수 있다.
    • 배열의 초기화는 중괄호를 사용한다.

     

    🔔 예) 배열 초기화의 예를 보여주는 프로그램

     

    🎯 프로그램 설명

    int violet[5] = {78, 97, 56, }

    • 세원소의 초기값만 명시되었음으로, 나머지 원소의 값은 0으로 초기화된다.

     

    결과

     

     

    🔔 예) 문자열 출력

     

    🎯 프로그램 설명

    • 마지막 TEST 의 0은 NULL로 문자열의 끝을 나타낸다.

     

    결과

     

     

     

    배열과 포인터

    🔔 예) 배열의 주소를 출력하는 프로그램

     

    🎯 프로그램 설명

     

    심볼 테이블

    type name address
    int[] score BFFFF9B4

     

    [배열 score[5] 의 메모리 할당]

    BFFFF9B4       BFFFF9B8        BFFFF9BC       BFFFF9C0        BFFFF9C4

                  

    score[0]         score[1]           score[2]              score[3]            score[4]

       

    결과 :  

          

     

    🔔 예) 포인터변수를 이용하여 배열의 주소값을 출력하는 프로그램 

         

    🎯 프로그램 설명

     

    P

    BFFFF9B4         BFFFF9B8        BFFF9BC          BFFF9C0          BFFFF9C4

                  

    score[0]          score[1]            score[2]           score[3]           score[4]

     

    • 포인터와 유사하지만 score는 0주소값으로 고정된다.
    • &score + 1 을하면 배열전체가 움직여 20byte 씩 이동한다.

     

    결과

     

     

     

     

     

    728x90
    반응형
상단으로