글
#include <stdio.h>
#include <string.h>
typedef enum conticode {asia, africa, america, europe, oseania} cc;
typedef struct {char cnm[30]; double lsz; cc ctnt; double preci;} ctrytype;
char conti_names[5][30] = {"asia", "africa", "america", "europe", "oseania"};
int convert_cname_ccode (char name[]);
void main () {
ctrytype nations[200] = {
{"Korea", 44.5, asia, 1534.7},
{"Naizria", 6.7, africa, 675.9},
{"USA", 203.4, america, 1230.4},
{"Japan", 103.5, asia, 1590.7}
};
int i, ccode;
char cname[30];
do{
printf("대륙이름을 입력하시오> ");
scanf("%s", cname);
ccode = convert_cname_ccode(cname);
if(ccode == -1)
printf("그런 대륙은 존재하지 않습니다. \n");
else
for (i=0; i<4; i++){
if(nations[i].ctnt == ccode)
printf("국가=%s, 강수량=%8.2f \n", nations[i].cnm, nations[i].preci);
}
}while(cname[0]!='$');
}
int convert_cname_ccode (char name[]){
int i;
for(i=0;i<5;i++)
if(strcmp(conti_names[i], name) == 0) return i;
return -1;
}
제 9장: 포인터
[포인터]: 메모리의 주소
- 변수의 포인터 = 변수의 주소
변수를 선언하면 메모리 공간이 할당됨
변수의 포인터: 변수의 값이 저장되는 메모리의 주소(시작주소)
- 주소연산자 &

&v : 변수 v의 주소
일반적으로 하나의 □ 당 4byte
[예} 주소 출력하기
- 변수의 주소를 출력
#include <stdio.h>
int p, q = 100;
main()
{
int a, b;
printf("address of a, b = %p, %p\n", &a, &b); .... 지역변수
printf("address of p, q = %x, %x\n", &p, &q); .... 전역변수
printf("address of of a string = %x\n", "univ"); … 문자열상수
}
형식 지정자 %p : 포인터 출력용 (16진수로 출력)
포인터 출력은 부호 없는 정수 출력용인 %x, %o, %u를 사용해도 됨
[포인터 변수]: 포인터(메모리 주소)를 저장하는 변수
- 포인터 변수 선언: 포인터 변수는 가리키는 곳에 저장된 자료형을 함께 선언함
int *p; .... 정수에 대한 주소의 자료형이 p라는 변수에 저장된다.
char *q;
double *r;
보통 자료형과 함께 선언 가능
int a, p*;

(변수 a와 p를 잡는다. a는 int자료형, p는 int*형(정수를 저장하는 공간에 대한 주소))
자료형(data type) 자료를 저장한 공간 변수
int 92486 a (a라는 공간안의 값은 정수형)
char 'm'
[간접 연산자 *]
- 간접 연산자
*p : 포인터 변수가 가리키는 곳에 저장된 값(간접참조)
(cf) 단순 변수 a는 변수에 저장된 값을 나타냄 (직접 참조)
간접연산자 *는 주소연산자 &의 반대 역할
int a, *p;
…
p = &a; … p에 변수 a의 주소 저장
이 때에 *p의 값은 a와 같음
[포인터 변수의 초기화]
- 포인터 변수는 초기화 한 후에 간접연산자를 사용해야 함
int a=100, b=200;
int *p;
a = *p; … 잘못됨
*p = b; … 잘못됨
p = &a; … 포인터변수 초기화
b = *p; … b = a 와 같음
*p = b; … a = b 와 같음
- NULL 포인터
p = NULL; … 포인터 p가 가리키는 곳이 없음을 명시함
NULL은 <stdio.h>에서 0으로 정의된 기호 상수

수업내용 약간 첨가한 ppt파일
주말과제:
학사정보:
학생정보:
학생 한명: 이름(char sname[30]),
수강과목:
교과목정보:
과목 1개: 이름(char cname[20]),
학정번호: enum hak {c0, c1, c2, c3, c5, c5})
강사(char iname[30]),
학점수: int(1~4)
typedef enum ec{c0,c1,c2,c3,c4,c5} hakjung;
typedef struct {char sname[30];
hakjung courses[4];} stutype;
typedef struct {char cname[20]; hakjung hcode;
char iname[30]; int credit; } coursetype;
// 학생들
stutype students[20] ={
{"park", {c0,c3,c5}},
{"kim", {c1,c2,c4}},
.....
}; //13명 정도를 넣을 것
coursetype courses[6] = {
{"math1", c0, "tom", 4},
...
}; // c0~c5까지 넣을 것
문제1: 학생의 이름을 입력 받는다
이 사람이 듣는 과목의 강사명들을 모두 출력한다
문제2: 이 학생과 같이 과목을 듣는 모든 학생의 이름을 출력