관리 메뉴

개발 노트

3/15 2주차 수업 본문

학부 공부 : 21.03.02~06.20/데이터베이스 이론 및 실습

3/15 2주차 수업

hayoung.dev 2021. 3. 15. 10:38

[C언어]

ㆍc언어 함수선언은 main 앞에 작성

 

ㆍex) a=5;

++a : 먼저 1 더하고 a출력 → a=6

a++ : a출력 후 1 더함 → a=6 출력 후 7 됨

--a : 먼저 1 빼고 a출력 → a=6

a-- :  a출력 후 1 뺌 → a=6 출력 후 5 됨

 

ㆍint fn2 (int num) 이라 하면

num 은 call by value가 됨(다음 변수 사용 시 적용 안되는 일회용 값)

 

ㆍint fn22 (int *num) 이라 하면

num 변수에 값이 저장되어 다음 사용시에도 반영됨

*가 포인터 형식임(레퍼런스) 값으로 주소(번지)를 받음. ex)

a=10;
int *p;
p = &a;
printf("%d, %p, %p, %p, %d\n", a, &a, p, &p, *p);

출력 결과 : 10, 0x7fff5472aae0, 0x7fff5472aae0, 0x7fff5472aae8, 10

출력 결과 해설

a : a의 값은 10

&a : a의 주소(번지)값은 ~e0

p : p에 저장된 값은 a의 주소값이므로 ~e0

&p : p의 주소(번지)는 ~e8

*p : p의 주소(번지)가 가지고 있는  포인터 값은 10 (p의 값 아님)

 

 

**디비 2주차 과제 워드파일에 있음

 

포인터 공부 소스코드

#include <stdio.h>

//함수 프로토타입 선언
int fn1();
int fn2(int);
int fn3(int[]);
int fn22(int *);


int main()
{
	
	int a = 5;
	
	printf("value of a : %d\n", a);
	printf("a의 번지값 : %p\n", &a);
	
	fn1();
	fn2(a);
	printf("value of a : %d\n", a);
	printf("a의 번지값 : %p\n", &a);
	
	a = 10;
	fn22(&a);
	printf("fn22 value of a : %d\n", a);
	printf("a의 번지값 : %p\n", &a);

	int arr1[5] = { 3, 6, 2, 9, 4 };
	fn3(arr1);
	
	int *p;
	p = &a;
	printf("%d, %p, %p, %p, %d\n", a, &a, p, &p, *p);
	
	int **p2;	//포인터의 포인터
	p2 = &p;
	printf("%d, %p, %p, %p, %d, %p, %p, %p, %p, %p, %d\n", a, &a, p, &p, *p, p2, &p2, *p2, *&p2, &*p2, **p2);
	
	return 0;
}


int fn1() {
	printf("Hello World\n");

	return 0;
}

//가인수 call by value (변수를 사용하여 연산해도 원래 변수값은 변하지 않음)
int fn2(int num) {
	num = num * 2;
	printf("value of num : %d, %p\n", num, &num);
	return 0;
}

// call by reference (변수를 사용하여 연산하면 변수의 값도 변함)
int fn22(int* num) {	//포인터는 변수값에 번지값이 들어온다.
	*num = *num * 2;
	printf("value of num : %d, %p, %p\n", *num, num, &num);
	return 0;
}

int fn3(int arr[]) {
	for (int i = 0; i < 5; i++)
	{
		printf("value of arr : %d, %p, %p\n", arr[i], arr, &arr[i]);
	}
	return 0;
}

 

출력 결과

 

 

 

구조체 공부 소스코드

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>

typedef struct T {
	int no;
	char name[10];
	int deptno;
}Emp;

int printEmp(Emp);	//선언, 입력은 Emp
int printEmpArray(Emp* []);
int printEmpPointerToArray(Emp *);
int fillEmp(Emp *);
int printPEmp(Emp*);

int main()
{
	int i=5;
	Emp e1;
	e1.no = 1;
	strcpy_s(e1.name, "kim");
	e1.deptno = 11;
	
	Emp e2;
	e2.no = 2;
	strcpy_s(e2.name, "lee");
	e2.deptno = 22;
	
	printf("%d\n", i);
	printf("%d, %s, %d\n", e1.no, e1.name, e1.deptno);
	printf("%d, %s, %d\n", e2.no, e2.name, e2.deptno);

	Emp emps[4] = {		//구조체 배열
		{1, "kim", 11},
		{2, "lee", 22},
		{3, "park", 33},
		{4, "choi", 11}
	};

	printEmp(e1);
	printEmp(e2);
	printEmp(emps[0]);
	printEmp(emps[1]);
	printEmp(emps[2]);
	printEmp(emps[3]);
	
	for (int i = 0; i < 4; i++)
	{
		printEmp(emps[i]);
	}

	int* p;
	Emp* ep1;

	p = &i;
	ep1 = &e1;

	printf("%d, %p, %p, %d\n", i, &i, p, *p);
	printf("%p, %p\n", e1, &e1);
	printf("%d, %d, %s, %d\n", e1.no, ep1->no, ep1->name, ep1->deptno);
	
	Emp* eparr[4];	//Emp구조체 포인터 배열
	//eparr[0] = emps[0];
	//eparr[1] = emps[1];
	//eparr[2] = emps[2];
	//eparr[3] = emps[3];

	for (int i = 0; i < 4; i++)	{
		eparr[i] = &emps[i];
	}

	printEmpArray(eparr);

	Emp* esap = emps; 	//위의 구조체 배열을 하나의 포인터로 만든 것이 구조체 배열 포인터. emps번지를 esap포인터로 만들어 받은 것.
	printEmpPointerToArray(esap);

	Emp* k1, * k2, * k3;
	k1 = (Emp*)malloc(sizeof(Emp));	//k1에 계산한 Emp크기만큼 메모리를 할당하고 
	k2 = (Emp*)malloc(sizeof(Emp));
	k3 = (Emp*)malloc(sizeof(Emp));
	fillEmp(k1); fillEmp(k2); fillEmp(k3);
	printPEmp(k1); printPEmp(k2); printPEmp(k3);	//k1, k2, k3는 포인터임

	return 0;
}

int fillEmp(Emp* kk) {
	kk->no = 1;
	strcpy_s(kk->name, "Kim");
	kk->deptno = 10;

	return 0;
}

int printEmpPointerToArray(Emp *eap) {	//구조체 배열 포인터 : 포인터로 받고 배열 형식(포인터)으로 출력함
	for (int i = 0; i < 4; i++)
	{
		printf("PTA %d, %s, %d\n", eap[i].no, eap[i].name, eap[i].deptno);
	}
	return 0;
}

int printEmpArray(Emp* eap[]) {	//포인터배열
	for (int i = 0; i < 4; i++) {
		printf("PEA %d, %s, %d, %d\n", eap[i]->no, eap[i]->name, eap[i]->deptno);
	}
	return 0;
}

int printEmp(Emp e) {	
	printf("%d, %s, %d\n", e.no, e.name, e.deptno);

	return 0;
}

int printPEmp(Emp *e) {
	printf("%d, %s, %d\n", e->no, e->name, e->deptno);
	
	return 0;
}

 

출력 결과

 

 

[eclipse 실행]

0. 폴더-> eclipse폴더 ->  eclipse.exe 실행

1. File -> New -> project -> java project

1) project name 설정 ex)Myproject01

2) module name don't create 선택 후 다음 선택도 no

2) 버전 선택

*참고 : delete 할 때 박스에 체크하고 지워야 폴더에 저장된 것도 지워짐

 

2. 

 

public 메인 표시 체크

 

*syso 를 치고 ctrl키와 space바를 누르면 system.out.println이 저절로 만들어진다.

이 외에도 for문, while문 쓸 때 이 단축키를 누르면 쉽게 코딩 가능

 

3. 실행 시

4. 코딩과 실행 결과

 

 

*참고 파일명 앞에 * 가 붙으면 저장이 안됐다는 뜻임.

 

 

 

[sqlplus]

 

1. cmd 창에서 SQL Plus 실행

 

-> 접속됨이라고 떠야 함

 

처음엔 

사용자명 : system

비밀번호 : password

 

2. c##scott 계정 생성 후 권한 부여

3. 접속 계정 변경 시

4. 계정에서 나올 땐 quit

 

*바로 들어가는 방법 두가지

1) cmd창에서 >sqlplus c##scott/tiger

2) cmd창에서 sqlplus 한 다음, 사용자명 : c##scott/tiger

 

 

5. sqldeveloper에서 실행도 가능.

반응형