일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- github clone
- database
- cmd
- jupyter
- console창
- 단축키
- 따옴표 삭제
- MySQL
- OrCAD 다운로드
- error
- 깃 토큰
- github token
- php
- PHPStorm
- import data
- 데이터베이스
- 클론
- visualstudio code
- DataGrip
- Python
- clone
- 파이썬
- error 해결
- csv
- vscode
- 오류
- 에러
- localhost
- Visual Studio Code
- run sql script
- Today
- Total
개발 노트
3/15 2주차 수업 본문
[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.
*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에서 실행도 가능.
'학부 공부 : 21.03.02~06.20 > 데이터베이스 이론 및 실습' 카테고리의 다른 글
4/26 8주차 (0) | 2021.04.26 |
---|---|
4/5 5주차 수업 (0) | 2021.04.05 |
3/29 4주차 (0) | 2021.03.29 |
3/22 3주차(종강 후 공개) (0) | 2021.03.22 |
3/8 Window와 Raspberry pi 에 JAVA, Gradle, Spring 설치 + Spring 예제 실습 (0) | 2021.03.15 |