Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

메모장

C언어 복습 17 (배열과 포인터) 본문

C언어 복습

C언어 복습 17 (배열과 포인터)

Captic 2019. 7. 16. 19:59

참고: 정덕 - <컴맹을 위한 C언어>

♨ 개인적 해석이 다분한 글임으로, 인지하지 못한 오류가 있을 수 있습니다 

 

▣ '배열이름'이 '배열의 첫 요소 포인터'로써 인식될 수 없는 상황들

 - 배열이름[인덱스] ≠ *(배열이름+인덱스) 인 경우

  ①배열이름이 주소연산자의 피연산자로 쓰인 경우

       &배열이름


  ②sizeof연산자의 피연산자로 쓰였을 경우

       sizeof(배열이름)


  ③char 배열을 초기화할때 문자열이 쓰였을 경우

       char 배열이름[]="HelloWorld";

 

▣ 포인터 배열
 - 배열인데 요소가 포인터

 - 원시 자료형(int, float 등) 배열 선언 

      자료형 배열이름[개수]

   예) int arr[10];

 

 - 포인터배열 선언

    포인터형  배열이름 [개수];

  예) char* charArr[10];

 

▣ 함수 포인터

 - 말 그대로 함수의 포인터(주소)

 

printf의 주소를 printf해보았다 그의 주소를 획득했다

  printf함수 자체를 인수로 참조 -> 함수의 시작주소 참조

 

 - 함수의 시작주소란?

    -> 프로그램 실행시키면 그 프로그램이 보조기억장치에서 주기억장치(메모리)로 복사

       이때, 코드 영역/ 데이터 영역/ 스택 영역으로 나위어 복사

 

       ①코드 영역: 프로그램에서 실행해야 될 명령어들이 들어가는 영역

       ②데이터 영역: 전역변수가 들어가는 영역과 힙 영역, 즉 데이터가 들어가는 영역

       ③스택 영역: 함수의 지역변수나 인자등이 들어가는 영역('함수의 영역'이 생성되고 소멸되는 영역)

 

   함수의 지역변수는 스택영역에 저장, 함수의 내용은 코드영역에 있다

 

 함수포인터

 - 함수포인터 변수를 선언할 때 필요한 정보

   ① 함수포인터 변수 이름

   ② 인자형태

   ③ 반환값의 형태

 

                ③반환자료형①(*변수이름)②(인자자료형);

             예) int (*fn) (int, int);

 

  fn은 함수포인터 변수, fn에 담기는 함수가 파라미터(인자)를 int형 2개를 갖는다면

  fn은 int 2개를 인자로 가져야 한다

 

예) 함수포인터 변수 사용예

add함수를 함수포인터 fn에 담아서 add대신 fn을 사용하여 10과 20을 합쳐보았다

 - 일반 포인터의 경우 역참조연산자를 이용하면 포인터가 가리키는 데이터를 참조할 수 있다

   그러나 함수포인터에는 역참조연산자를 사용할 필요가 없다 위의 예제와 같이 함수포인터 변수를 초기화했으면

   원래 함수를 호출하듯이 사용 가능

 

 포인터에 관한 주의사항

 1. 포인터가 가리키는 것의 자료형을 엄격히 구분 -> 배열이라면 무엇이 몇개 들어있는지 까지

 2. 연산자 우선순위와 방향을 고려해서 해석

 3. 강제 형 변환으로 포인터 변수에 주소를 직접 대입하지 않도록(고수 아니자너)

'C언어 복습' 카테고리의 다른 글

C언어 복습 18 (반복문 연습)  (0) 2019.07.21
C언어 복습 16 (포인터)  (0) 2019.07.13
C언어 복습 15 (배열)  (0) 2019.06.30
C언어 복습 14 (자료형)  (0) 2019.06.26
C언어 복습 13(이름을 부르면 인사해주기)  (0) 2019.06.25