C언어 강좌 (const/함수포인터/배열/배열의 선언과 사용/배열의 초기화/배열과 포인터)
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 씩 이동한다.
결과