포인터 - CPU와 BUS MEMORY간 전송과정, void, return, 함수
BUS가 16bit라면,
0에서 216까지 주소를 가지며, 따라서 포인터의 크기는 2byte가 된다.
BUS가 32bit라면,
0에서 232까지 주소를 가지며, 따라서 포인터의 크기는 4byte가 된다.
→ 즉, BUS가 주소영역을 좌우하고 주소영역이 포인터의 크기를 좌우한다.
만약 8bit cpu가 버스를 통해 1byte 100을 메모리(10번지)로 전송하면
1) 주소 보냄(cpu)
→ cpu가 BUS를 통해 1byte 주소(10번지)를 메모리로 전송한다.
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
2) 주소 받음(memory)
→ 0은 0V, 1은 5V로 BUS를 타고 메모리 관리자로 전송되어 메모리 관리자는 0V를 0, 5V를 1로 인식하여 cpu가 보낸 주소를 받는다.
3) 10번지 선택(memory)
→ 메모리 관리자는 CPU에게 받은 주소 10번지를 메모리에서 찾는다.
4) 100을 전송(cpu)
→ CPU는 다시 100을 전송한다.
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
5) 100을 수신(memory)
→ 0은 0V, 1은 5V로 BUS를 타고 메모리 관리자로 전송되어 메모리 관리자는 0V를 0, 5V를 1로 인식하여 cpu가 보낸 값(100)을 받는다.
6) 100을 저장(memory)
→ 메모리 관리자는 BUS를 통해 받은 값을 메모리에 저장한다.
※ 메모리를 어떻게 사용할지는 CPU가 결정한다.(모든 동작은 CPU가 결정)
- 함수
C 프로그램은 함수들의 집합으로 구성된다. 함수란 특정작업을 수행하는 독립된 프로그램이다. 함수의 사용은 아래와 같은 장점이 있다.
1) 프로그램 작성의 난이도를 낮출 수 있다.
2) 하나의 큰 프로그램을 여러 사람이 나누어 작업할 수 있다.
3) printf() 함수처럼 자주 사용되는 코드를 한번 작성하여 필요할 때마다 반복적으로 사용할 수 있다.
4) 한 번 오류가 검증된 함수는 다시 오류 검사를 할 필요가 없다.
C에서 제공하는 기본 함수를 (표준) 라이브러리라고 한다.
ex) scanf, printf 등은 표준라이브러리에 있는 함수들이다.
float int |
|
average main |
|
( ( |
int n1, int n2
|
) ) |
; { } |
반환자료형 (반환형) |
|
이름 |
|
괄호 |
인수 / 인자 |
괄호 |
|
⇒ 반환형 이름( ) ; or 반환형 이름( ) { }
⇒ ;(세미콜론)이 선언되었을 때(즉, 함수의 본체가 없을 때) 이것을 함수의 원형(prototype) or 함수의 인터페이스이라 부른다.
⇒ { }(중괄호)로 시작하면 함수가 정의되어있다고 한다.
※ void → 회피하다 / 값 없음(empty) → 반환자료형이 없다.(return)
return |
반환자료(type이 일치해야 한다.) |
→ return 0;에서 0은 정수형이므로 즉, int형이다.
→ void 에서는 반환값이 없으므로 return ; 라고만 써도 된다.
// 두 정수를 입력받아 평균값을 출력하는 프로그램으로 평균값은 average() 함수가 산출한다.
#include<stdio.h>
float average(int n1,int n2); // 함수의 원형
int main()
{
int num1, num2;
float avrg;
printf("Please enter an integer: ");
scanf("%d",&num1);
printf("Please enter an integer: ");
scanf("%d",&num2);
avrg=average(num1,num2); // average() 함수의 호출
printf("The average of %d and %d is %6.3f\n",num1,num2,avrg);
return 0;
}
float average(int n1, int n2)
{
float avg;
avg=(float)(n1+n2)/2;
return (avg);
}
⇒ 실행결과
#include<stdio.h>
void Hello();
int main()
{
printf("-----시작-----\n");
Hello();
printf("-----끝-----\n");
return 0;
}
void Hello()
{
printf("Hello everyone!!!\n");
printf("C programming is interesting\n");
printf("but, C programming is difficult\n");
return ;
}
⇒ 실행결과
'내장형 하드웨어 > C언어' 카테고리의 다른 글
makefile 사용방법(rm, -rf, echo, @), linux 용어(sshd,server,client,path,set), ATmega makefile 분석 (3) | 2011.04.21 |
---|---|
컴파일 5단계, 분할 컴파일, linux 기본 명령어 복수 (0) | 2011.04.20 |
포인터 - 포인터 변수가 가리키는 자료형의 의미, 세그먼테이션(segmentation) (0) | 2011.04.18 |
포인터 변수의 변화, 주소 저장 방식 - Big Endian, little Endian (1) | 2011.04.15 |
무한반복문, break, 포인터 (0) | 2011.04.14 |