티스토리 툴바


10,11

Computer/C포인터 2009/07/16 21:22


10

가변인자의 필요성 자료형의 갯수가 정해지지 않앗을때
가변인자 사용자 함수 (int n, ... ) 첫번째 매개변수에 갯수를 전달.
가변인자 사용할대는 매크로 함수를 사용해 가변인자 함수를 구현

가변인자의 중요 매크로 함수
va_list  va_start  va_arg   va_end

동적 메모리는 프로그램 영역중 힙 영역에 생성된다
가변인자 함수는 인자의 갯수나 인자의 자료형이 다른 함수를 만들고자할때 사용

const상수는 변수 영역의 메모리를 상수화시킬 때 사용한다.
const 상수는 메모리 값을 변경시키지 못하도록 하기 위해 사용된다.

프로그래머에 따라 const붙이는 곳이 다름
ex) int const n; = const int n;

11

getch() putch() 한문자를 입력받는것
getch()는 문자를 입력받아 문자를 화면에 보여주지 않음
getche() 한문자를 입력받아 화면에 문자를 보이는 함수

getchar() 버퍼(가상기억공간)를 사용하여문자를 입력받고 한문자를 반환하는 함수
 버퍼에 문자가 있는지 확인하고 버퍼에 문자가 없으면 \n을 입력할때까지 버퍼에 문자를 입력하므로
 여러문자를 입력받을수 있고 입력받은 문자중 첫번째 문자를 반환한다.
putchar()함수는 한 문자를 화면에 출력한다.
fgetc(stdin) =>첫번째 인자에 파일포인터를를 인지하는데 stdin이면 키보드부터 한문자를 입력받는것을 인지 getchar와 같음
fputc(c, stdout) => 첫번째 인자를 두번째 키워드에 넘겨준다.  stdout는 모니터를 뜻한다.

fscanf(stdin," %c", &c) =>파일관련 입력함수. 첫번째 매개변수는 파일의 포인터
fprintf(stdout," %c", c) = >파일관련 출력함수. 첫번째 매개변수는 파일의 포인터

gets() =>문자열 입력함수 gets의 첫번재 인자는 문자열을 저장받을 버퍼의 시작주소
puts() =>문자열 출력함수 puts의 첫번재 인자는 문자열을 저장받을 버퍼의 시작주소

fgets(1,2,3) =>첫번째 시작주소, 두번째 최대한 입력받고자하는 문자 문자의갯수, 세번째 인자는 파일포인트
fputs() =>세번째 인자는 파일포인트

fscanf(파일포인트," ", ) =>scanf와 같음
fprintf(파일포인트," ", ) =>printf와 같음

sscanf(1,2,3) =>문자열을 문자 정수 실수로 변환해줌
sprintf(1,2,3) =>정수 실수 문자를 문자열로 변환해줌

'Computer > C포인터' 카테고리의 다른 글

10,11  (0) 2009/07/16
8,9,10-1  (0) 2009/07/15
7,8  (0) 2009/07/14
4,5,6  (0) 2009/07/14
9日  (0) 2009/07/09
1장 메모리  (0) 2009/07/08
Posted by 짐승마리오

8,9,10-1

Computer/C포인터 2009/07/15 23:02


8

int형 주소를 반환(auto) //반환 자료형 int*
auto변수는 함수에서 절때 리턴하지말아라(함수종료시 사라짐)
int형 주소를 반환(static) //반환 자료형 int*
static변수는 함수에서 주소를 반환해도 된다.(함수종료시 남아있음)

문자열의 주소를 반환
char*
문자열 주소를 반환할때도 static문자열을 저장할수있는 배열로 만듬
사용자 함수는 사용자가 직접 만들어 사용하는 함수이다
함수는 호출시 인자를 전달할 수 있고 종료시 반환 값을 반환할 수 있다.
함수의 매개 변수는 인자와 같은 자료형을 사용 반환형은 반환값과 같은 자료형을 사용
함수 내부에서 선언된 자동 변수는 함수 내에서만 사용 가능
함수느에서 배열 메모리의 공유는 배열 시작 주소를 저장할 수있는 포인터 변수 이용

9.void포인터와 함수포인터.!

void형 포인터 어떤 자료형을 저장할수 있다.
void형 포인터 메모리접근은 그에 맞는 자료형주소로 변환 ex(char *)void

 함수포인터의 이용목적
1.호출하는 이름을 통일하는것 = 서로 다른 함수들을 하나의 이름으로 호출하여 호출할때마다 서로 다른 기능을
  수행할 수 있도록 한다는 것
2.함수의 주소를 저장하는 것 = 함수의 크기에 상관없이 함수의 주소 4byte만을 저장함으로써 배열의 시작 주소를
  저장하여 배열요소에 접근하듯 함수의 기능을 사용할수 있다는 장점이잇다.
ex) void fplus(int n1,int n2)
    void (*fp)(int, int)

void*형은 자료형과 무관하게 주소를 저장하고자 할 때 사용할 수 있는 포인터임
void*형 변수를 이용하여 값에 접근하고자 할 때 형변환하여 사용한다.
함수 포인터는 함수의 주소를 저장하는 포인터로 함수의 주소를 저장하면 그 주소를 이용하여 함수를 호출하는 것이 가능
함수의 원형이 같은 함수들의 주소는 하나의 함수 포인터에 저장하는 것이 가능. ex) int (*func[2])();

'Computer > C포인터' 카테고리의 다른 글

10,11  (0) 2009/07/16
8,9,10-1  (0) 2009/07/15
7,8  (0) 2009/07/14
4,5,6  (0) 2009/07/14
9日  (0) 2009/07/09
1장 메모리  (0) 2009/07/08
Posted by 짐승마리오

7,8

Computer/C포인터 2009/07/14 20:11


7
-구조체의 주소를 저장하기 위해서는 구조체와 같은 자료형의 포인터 변수에 저장한다.
-1차원 배열 구조체의 주소를 저장하기 위해서는 구조체와 같은 자료형의 1차원 포인터 변수에 저장한다
-2차원 배열 구조체의 주소를 저장하기 위해서는 구조체와 같은 자료형의 2차원 배열 구조체의 주소를 저장
할 수 있는 구조체 배열 포인터에 저장한다
-구조체의 주소를 저장하고 사용하는 방법은 다른 기본 자료형의 주소를 저장하고 사용하는 방법과 같다.
-구조체의 크기는 그 구조체의 모든 멤버의 크기와 같지 않을수있다(#pragma pack(1))->구조체의 실제 멤버 들의 크기와
같도록 주소를 매핑 하지만 속도 저하를 유발

8-1,2
프로세스는 크게는 2개 작게는 4개의 영역으로 나뉨
1명령어 code
 Text
2자료형 stack auto변수
 heap 동적변수들
 Data static변수

auto변수 키워드 앞에 붙어 자동변수의 선언 생략가능
 { }블록내에서만 사용가능
static는 data역역에서생성
 블록내에서 사용가능
 프로그램시작시 생성 프로그램 종료시 삭제

초기화와 대입은 완벽히 다른것이다
1 int n1 = 0; =>변수를 선언할때 값을 할당하는것을 초기화
2     n2 = 0; =>대입이란 대입 연산자를 실행할 때마다 값을 할당하는것.

초기화는 단 한번 일어남. 변수가 선언될때!
auto(자동)변수는 함수가 호출 될대마다 변수가 생성되므로 초기화가 함수호출시마다 일어날수있음.
static(정적)변수는 프로그램 시작시 변수의 선언과 함께 초기화가 이루어짐

'Computer > C포인터' 카테고리의 다른 글

10,11  (0) 2009/07/16
8,9,10-1  (0) 2009/07/15
7,8  (0) 2009/07/14
4,5,6  (0) 2009/07/14
9日  (0) 2009/07/09
1장 메모리  (0) 2009/07/08
Posted by 짐승마리오