<1.> 자료형을 기반으로 표현이 되는 상수

1. 상수

1) 메모리공간에 저장이 된다.

2) 이름이 없다

3) 이름이 없으므로 메모리에 저장된 상수의 값을 변경시킬 수 없다.

* 연산의 대상이 되기 위해서는 메모리 공간 어딘가에 저장이 되어있어야 한다.

 

2. 상수의 저장

1) 상수는 기본자료형에 따라 데이터를 표현한다.

2) 기본적으로 모든 정수는 int(4byte) 형으로 저장된다

3) 기본적으로 모든 실수는 double(8byte)형으로 저장된다.

 

* literal(= 문자 그대로의 )(=상수) : 상수는 자료형을 기반으로 메모리공간에 저장이 되기 때문에 그 자체로 데이터로 인정한다. 그래서 나온 표현방법  

 

 

3. 접미사(-> 명시적 형변환의 일종* 실수상수를 f , 정수상수를 l로 변환할때 사용한다.  ) : ~형으로 표현해달라고 명시적 선언.

1) java는 상수의 자료형 검사에 엄격함.

-long a=10000000000; : 에러 발생. 10000000000가 int의 범위를 넘어가기 때문에. -> long a=10000000000L;

2) 변수의 자료형 크기 >= 상수의 자료형 크기 이지 않으면 compile error 가 발생한다

- float a=4.5;  : 4.5의 자료형이 double으로 8byte인데 a의 자료형은 float으로 4byte이다 -> float a=4.5f;

3) 상수의 뒤에 L/l 이나 f/F을 붙여 자료형을 바꿀 수 있다.

4) 예제 >

 

 

 

-e1 : double상수 double변수에 저장

-e2 : float상수 double변수에 저장 ( double이 8byte로 더 크기 때문에 변수와 상수의 자료형이 다르지만 에러가 나지 않는다.)

-n1 : int 범위 넘어가는 수 long상수 지정 -> long에 저장.

-n2 : int상수 long에 저장( double이 8byte로 더 크기 때문에 변수와 상수의 자료형이 다르지만 에러가 나지 않는다.)

 

 

** byte와 short형 상수 표현을 위한 접미사는 존재 x : 산술연산은 int형에서 발생하고, byte/short형 변수에 대해서는 int형상수 기반의 초기화 허용.

byte num=20;

short num=50; 가능.

 

 

 

 

<2> 자료형 변환

: 인간이 인식하기에 같은 수도 컴퓨터에서의 표현방식이 다르면 다른수로 인식된다.

1. 자료형변환의 의미 : 값의 표현방식을 바꾸는 것.

*예시 ) short형의 수를 연산할때 int 로 형변환 후 연산 하는것, 또 다시 short로 형변환 하는것

1) 종류 : 자동형변환, 명시적형변환

 

2. cpu에서의 연산

데이터는 2진수로 저장이 되는데 자료형마다 표현방식이 다르기 때문에 각 데이터들의 표현된 모습 그대로 연산을 하면 옳지 않는 값이 나온다.

따라서 자료형을 하나로 통일해 줘야 한다. (자동형변환) 

 

3. 자동형변환(implicit Conversion) : 연산의 대상이 되는 두 피연산자의 자료형이 일치하지 않아서 자동으로 발생하는 형변환

ex) double num2=3.5f+12

1) 연산에서의 자동 형변환 3.5f + 12 -> 3.5f + 12.0f

2) 데이터저장에서의 자동 형변환 12.0f -> 12.0(double)

2) 자동형변환 규칙 ( 데이터의 손실이 발생하지 않거나, 발생하더라도 손실이 제한적인 경우에만 자동형변환을 한다.)

byte -> short/char -> int -> long -> float -> double  

: 자료형의 바이트 크기가 아닌 값의 표현번위를 기준으로 정의하였다.

 

 

4. 명시적형변환(Explicit Conversion) : 명시적형변환 연산자 이용

1) 실수형상수 -> 정수형상수

int num=(int)3.15 : 소수점 이하의 데이터 손실

2) 실수형상수 -> 실수형상수 / 정수형상수 -> 정수형상수

long num1=2147483648L;

int num2=(int)num1; : 상위 바이트가 잘려나간다

.

int num3=150L;

long num4=(long)num3; : 상위 바이트가 생겨난다.

 

 

* 형변환 : 하나의 연산으로 이미 저장되어있는 값이 변하는 것이 아니라 저장된 값을 참조하여 형변환된 새로운 값을 만드는것.

 

 

 

num1 : ch1은 char형이고 num1은 int 형이다. char형은 int형으로 자동형변환이 가능하므로 ch1에 저장된 값이 형변환되어 num1에 저장된다

num2: ch2는 char형이고 num2는 int형이라서 자동형변환이 일어나는데 명시적으로 형변환 연산으로 진행하고 있다. 하지만 형변환 된다는 사실이 코드에 명시되어 있으므로 더 권장되는 코드구현이다.

 

 

 

'언어 > JAVA' 카테고리의 다른 글

chapter4. 연산자(Operator) (2)  (0) 2017.04.12
chpter4. 연산자(Operator)  (0) 2017.04.07
chapter2. 변수와 자료형  (0) 2017.04.05
chapter1 Java의 시작(2)  (0) 2017.04.04
chapter1. java의 시작(1)  (0) 2017.04.04

<1> 변수의 이해와 활용

1. 메모리 공간과 변수의 활용

변수 : 데이터 저장과 참조를 위해 할당된 메모리 공간.

메모리공간의 활용 : 데이터 저장 및 참조

" 변수는 메모리 공간 할당과 접근을 해결하기 위한 것이다"

 

2. 변수(Varible)에 대한 간단한 이해

: 변수 선언 - 메모리공간 할당 / 공간의 접근을 위해 이름 붙여짐

1) 선언 방법 : 자료형 변수이름; -> ex> int num1;

* 자료형 : 변수에 저장할 데이터 종류

*int: 10진수 정수

 

2)

저장 : 변수명 = 저장할내용 ; ex) num1=10;

참조 : 변수명을 불러주면 된다. ex) System.out.println(num1 + "은 num1이다");  -- 출력내용 : 10은 num1이다.

 

3) 선언, 저장, 참조 예시

(+) 선언과 동시에 저장 가능, 변수들의 연산 값 저장 가능

(+) 10진수 정수를 저장하는 용도로 변수를 선언했기 때문에 정수만 저장 가능하다.

 

 

 

 

 

3. 자료형의 종류와 구분.  

1) 자료형 : 데이터의 종류를 알리는 용도로 사용되는 키워드 (*키워드 : 자바의 문법을 구성하는 단어)

정수 : byte, short, int, long

실수 : (*프로그래밍에서는 실수를 정수아닌 실수를 말한다) float, double

문자 : char

참or거짓 : boolean

 

값의 번위에 따라 적절한 자료형을 선택해 사용한다.

자료형 

데이터 

메모리크기 (byte)

표현가능범위 

boolean

참과거짓 

1

true, false 

char 

문자 

모든 유니코드 문자 

byte 

정수 

 -128~127

short

2

 -32768~32767

int 

4

 -2147483648~147483647

 long

8

 -9223372036854775808~922337203854775807

 float

실수 

4

 ±(1.40x10^45 ~ 3.40x10^38)

 double

8

 ±(4.94x10^-324~1.79x10^308)

 

 

2) 실수의 표현 및 저장에서의 오차 *<3>실수 표현방식에서 다룸

 

 

->연산하는 과정이 아니라 1.0000001과 2.000000을 변수에 저장하는 과정에서 오차가 생겼다.

 

 

 

4. 변수의 이름 짓는 방법

1) 대소문자 구분

2) 숫자로 시작할 수 없음

3) $ _ 이외에 다른 특수문자 사용 x

4) 키워드는 변수의 이름으로 사용 x

 

 

 

 

<2> 정수 표현방식의 이해

 

1. 정수를 표현하는 방식 ( 1바이트를 예시로 하면 )

()()()()()()()()

 

1) 8개의 비트중에 맨 왼쪽의 비트는 부호를 의미한다.  (1은 음수, 0은 양수) MSB(Most Significant Bit)

2) 나머지 7개는 양적인 크기를 의미한다.

ex) 25(10) = 00011001(2)

 

2. 음의 정수를 표현하는 방식 :

"양의 값에 2의 보수를 취하여 얻는 값 "

 

3.

2의 보수 : 1의 보수에 1을 더한것.

1의 보수 : 2진수의 수를 반전시킨것.

 

ex ) 00000101(+5) ---1의보수----> 11111010 ----1더하기-----> 1111101

 

1111101이 -5라는 것의 증거 : 00000101 + 1111101 = 100000000 (0) (* 맨 앞의 1은 올림수(carry)버림 한다)

 

 

 

 

 

<3> 실수 표현방식의 이해

-->무한개의 실수가 존재한다. 따라서 정수의 표현방식으로 표현하기엔 한계가 크다.

 

1. 정밀도를 포기하고 범위를 넓혔다.

1) 실수의 표현을 위한 수식 : ( IEEE 754식을 이해하기 쉽게 표현한것 )

±(1.m) x 2^(e-127)

2) 위 수식에 따른 비트 구성

()    ()()()()() ()()()()()()()()()()

부호   e            m

 

3) 오차

위 수식으로 양수이고 m=1, e=0인  실수 :

비트표현 :  0 00000 0000000001 = 6.46521893 x 10^30

 

이 수에서 m 이나 e가 1씩만 차이가 나도 전체값이 아주 크게 변경된다, 즉 오차를 피할 수 없다.

 

 

= 수를 저장할 때는 위에서 보인 수식으로 그 값에 최대한 가까운 수가 만들어질 수 있도록 비트를 구성하여 저장한다.

또 참조하는 경우에도 저장된 비트를 위에 보인 수식으로 적용하여 값을 결정한다.

 

 

 

<4> 자료형의 이해

1. 정수 자료형 : byte, short, int, long

--차이 : 메모리 공간의 크기.

1) 컴퓨터의 cpu가 int형 정수연산을 가장 고속으로 처리하게끔 설계가 되어있기 때문에 연산을 하게 될 경우 long을 제외한 모든 정수 자료형이 int로 변환이 된다. 따라서 연산을 할 경우 int를 사용하는 것이 효율적이다. 

* long : int로 변환하면 데이터손실이 발생하기 때문에 변환이 일어나지 않는다. 

 

2) byte 와 short : 연산이 아닌 데이터가 지니는 값 자체가 중심이 되는 경우에 쓰인다. 많은 숫자 데이터들이 저장될때

 

2. 실수 자료형 float, double

- 크기의 차이가 있지만 float도 충분한 값의 표현범위를 가진다.

- 정밀도가 선택의 기준이 된다.

- float : 소수점 6자리의 정밀도 , double : 소수점 15자리의 정밀도

* 하지만 double도 15자리 아래에서 오차가 생겼을때 연산을 하게 되면 소수점 15자리보다 더 앞에서 오차가 발생할 수 있다.

 

 

3. 실수에 대한 e표기법과 정수에 대한 16진수 8진수 표기법

  

 

 

1) e±n : x 10의 ± n 승

2) 16진수 : 0x로 시작하면 16진수 표현으로 해석된다

3) 0으로 시작되면 8진수 표현으로 해석된다

 

 

3. 문자자료형 char

1) 유니코드 (unicode) 라는 세계의 모든 언어를 표현할 수 있는 문자체계를 사용한다. (16진수로 되어있다)

2) 문자 하나를 해당 변수에 저장하면 실제로는 문자의 유니코드 값이 저장된다. 

3) 문자는 작은 따옴표로 표시된다.

4) System.out.println은 char형 데이터를 적절히 출력해낸다. 

ch3 : 65는 16진수로 0x41 (unicode A)

ch4: 54620은 16진수로 0xD55C (unicode 한)

 

  * 해당 국가의 폰트가 설치되어 있어야 정상척인 출력을 보인다.

 

4. boolean (논리형)

true(참)와 false(거짓) 출력

b1, b2 : true 와 false를 저장하는 데이터공간이므로 초기화가 잘 되었고 출력할때 저장한 값 그대로 출력된다.

3<4 & 4<3 : 연산 결과가 참이냐 거짓이를 출력한다.

 

*반환 : 연산의 결과로 값이 만들어졌다

 

 

 

 

'언어 > JAVA' 카테고리의 다른 글

chapter4. 연산자(Operator) (2)  (0) 2017.04.12
chpter4. 연산자(Operator)  (0) 2017.04.07
chapter3. 상수와 형변환(Type Casting)  (1) 2017.04.06
chapter1 Java의 시작(2)  (0) 2017.04.04
chapter1. java의 시작(1)  (0) 2017.04.04

<2> 자바프로그램의 이해와 실행의 원리 

 1. 자바프로그램의 실행구조와 자바 가상머신. 


일반적인 프로그램의 실행구조 : 하드웨어 - Operating system - Program

-각 단계는 상호간의 통신을 하며 실행이 이루어 진다. 

-프로그램이 운영체제와 직접적인 통신을 하기 때문에 어떠한 운영체제에서 만들어진 프로그램은 다른 운영체제에서 실행되지 못한다. 

 (기능의 완성방법이 다르다. 그래픽, 키보드, 마우스 관련 기능들)


자바에서의 프로그램 실행구조 : 하드웨어 - Operating system -(운영체제에따라 달라짐)- Java Virtual Machine -(항상같음)- Java Program

- 자바 프로그램을 운영체제에 관계없이 사용할 수 있다. 

- 따라서 같은 소스코드를 Java Virtual Machine 만 다르게 하면 여러 운영체제에서 사용할 수 있다



"Java Program은 운영체제에 독립접 & Java Virtual Machine 은 운영체제에 독립적"




2. 자바컴파일러와 자바 바이트 코드 

1) 컴파일러 (javac.exe)

: 소스코드로 이루어진 소스파일(.java) (사람이 이해할 수 있는 파일) - 자바 바이트 파일(.class) (자바가상머신이 이해할수 있는 코드)

2) 자바런처 (java.exe)

:자바 바이트 파일을 자바 가상머신이 실행할 수 있도록 전달하고 인도해 주는 매개체.


 * 가상머신을 매체로 하는만큼 속도는 타 언어들보다 느리지만 큰 문제가 되진 않는다

 

 

<3>

1. java의 기본적인 형식 : class - 메소드 - 여러가지 실행들

 

2. System.out.println :

1) 기본형

 

정수 , 실수, "문자열"+정수 , 실수+"문자열", "문자열"+"문자열", 연산 이 출력 가능하다. 

*  "" 안에 있으면 문자열로 취급된다.

* +는 이전에 출력된 내용과 다음 내용을 이어서 출력한다

 

 

 

2) "문자열" + 쌍따옴표 없는 문자열이 출력 가능할까?


-> 에러. 문자열은 무조건 "" 를 붙여야 한다.

 

 

 

3) 연산과 문자열을 + 기호를 이용하여 이어서 출력할 수 있을까? 

 

 

-> 가능. 연산 결과+문자열내용 이 출력된다(/*~*/는 주석으로 complie에 참여하지 않는다)

 

* 연산이 뒤로 간다면 어떻게 될까?

 

-> 연산이 뒤로 간다면 연산 결과가 아닌 3과 5가 각자 출력된다

소스코드를 덧셈연산이 왼쪽부터 이루어져서 이러한 출력이 일어난다.

연산이 앞에 오는 경우 2+5 (=7) + "문자열" ---> 7문자열 이 되고

연산이 뒤에 오는 경우 "문자열" + 2 (=문자열2) + 5 --->문자열25이 된다. (*Q2와 관련)

 

 

 

 

3. 퀴즈

Q1. compile 했을때 생겨나는 class file 이름을 바꾸는 법 :

소스파일 내에서 입력하는 class 이름을 바꿔주면 된다.

 

 

Q2.

System.out.println("2+5="+2+5);

System.out.println("2+5="+(2+5); 를 입력하고 결과를 관찰하자

"2+5=" +2+5는 2+5=25 로 출력되었고 "2+5="+(2+5)는 2+5=7으로 출력되었다.  이는 괄호가 수학에서의 의미와 유사하게 다른 것보다 우선적으로 연산이 되기 때문이다.

 

괄호가 없는 경우: "2+5=" + 2 -> 2+5=2 + 5 의 순서로 읽혀서 2+5=25 출력

괄호가 있는 경우: (2+5) (=7) -> "2+5=" + 7 순서로 읽혀서 문자열7 출력

 

 

 

Q3 여러가지 방법으로 12 출력하기

 

 

(정수) 12

(정수) 1 + (문자열)"2"

(문자열)"" + (정수)1 + (정수)2

(문자열) "12"

(연산) 5+7

(문자열)"1" + (정수)2

(문자열)"1" + (문자열)"2"

 

 

 

<4> 컴파일의 대상에서 제외되는 주석

1. 블록단위 주석 /* ~ */

한줄도 가능하다.

 

2. 행단위 주석 // 

 

 

 

 

=> 출력되는 내용은 System.out.println 기본형과 BlockComment.java와 LineComment.java 모두 다 같다.

 

 

 

3. 퀴즈

에서 정상적으로 주석처리된 부분을 찾아내고, 처리되지 않은 부분은 또 어디인지 찾아보자.

 

 

 

 

-소스파일을 compile 했을 때 :

 

-> 18번째 줄 (*/)의 */에서 오류.  

 

 

-맨 아래의 문단을 삭제하고 compile 했을 때

 

-> 정상적으로 주석처리된 부분이 정상처리되어 compile 된다.

 

 

정상적으로 추석처리된 부분 :

1)  /* one은 1*/ : 괄호안에서 한줄 블럭주석처리 가능

2)/*
  System.out.println(2);
  //System.out.println("2");
  */

: 블럭주석 안에 행주석처리 가능

 

 

 

정상처리 되지 않은 부분 : 
 1. /*
  System.out.println(3);
  /*System.out.println("3");*/
  */

 

이유 :  같은 글자 모양으로 처리한 것들이 한 쌍인데, compile 할 때 /* 와 가장 처음 만나는 */ 가 한쌍으로 읽히므로 마지막 남은 */이 쌍이 없는것으로 판단이 되어 오류가 난다.

 

결론 : 블럭주석처리 안에 블럭주석 처리는 불가능하다.

 

 

2) /* Two는 2 */

 

실행했을 때 출력이 되는것을 보아 쌍따옴표 안의 주석은 주석처리가 안된다는 것을 알 수 있다.

 

 

'언어 > JAVA' 카테고리의 다른 글

chapter4. 연산자(Operator) (2)  (0) 2017.04.12
chpter4. 연산자(Operator)  (0) 2017.04.07
chapter3. 상수와 형변환(Type Casting)  (1) 2017.04.06
chapter2. 변수와 자료형  (0) 2017.04.05
chapter1. java의 시작(1)  (0) 2017.04.04

<1>

1. JDK(Java Developement Kit) 다운로드

*JDK : 라이브러리 + 소프트웨어

https://www.oracle.com/index.html 홈페이지에서 다운로드 받을 수 있다. 


1) 홈페이지 모습 




2)상단의 Download- Java SE


*Java는 크게 세가지로 나뉜다. 

java SE(Standard Edition) : 일반솔루션개발용 

java EE(Enterprise Edition) : 기업환경의 solution 개발 

java ME(Micro Edition) : 가벼운 java, 소형 기기에 탑재하기 위한것 



3) Java선택




4) 자신의 컴퓨터 운영체제에 맞는 버전을 설치한다. 

운영체제는 내컴퓨터 - 시스템속성 - 시스템종류 에서 확인 가능하다






5) 별도의 설정 사항 없이 설치






2. PATH변수 편집하기

* 환경변수 PATH : windows가 명령프롬프트 상에서 실행파일을 찾는 경로의 정보. 명령프롬프트 상에서 디렉토리 경로에 상관없이 프로그램의 이름을 입력하여 해당 프로그램을 실행하기 원한다면  환경변수 PATH에 실행파일의 위치를 등록해야 한다. 


1) 설치가 완료된 경로로 이동. 




2) bin폴더 안에 javac.exe (자바 compiler) 와 java.exe(자바 launcher)가 있는지 확인한다.



3) 시스템 등록 정보 창 열기 

*시작메뉴 - 설정- 제어판 - 시스템 

*내컴퓨터-  마우스오른쪽 - 설정 


- 고급탭 선택하면 다음의 화면이 나온다. 


4) 환경변수편집

path - 편집

변수값에 ' ; ' 을 붙이면 연속적으로 변수값을 추가 할 수 있다 .

앞에 ;을 붙이고 bin폴더까지의 경로를 적는다 

C:\Program Files\Java\jdk.1.8.0_121\bin;


- 확인 





5) 편집완료 확인

cmd(명령프롬프트) 실행 -  java , javac 실행해본다. 

변수편집이 잘 되었다면 명령프롬프트의 디렉토리 경로에 상관없이 아래와 같은 실행의 결과가 나온다 (java의 경우 이 그림과 달리 영어일 수 있다)








3. 프로그램 작성과 실행 

IDE를 처음부터 사용하면 더 심화된 과정에서 어려움을 겪을 수 있다고 한다. 그 이유로 메모장을 사용


1) 파일 작성. 저장시 .java를 붙여준다





2)명령 프롬프트에서 작성한 파일이 들어있는 곳으로 디렉토리 경로 설정 (javac/java 는 PATH에 들어가 있지만 작성한 파일은 들어있지 않다.) 

<compile>

javac 작성한파일이름.java   *확장자 붙여준다 - dir으로 FirstJavaProgram.class 생긴거 확인( 이전파일에 작성한 class 명으로 파일이 생성된다)

*compile : 실행을 위한 상태로의 변경



<실행 > ( 실행도 실행할 ~.class 가 저장되어있는 디렉토리 상에서 해야한다)

java class명   **확장자 붙이지 않는다. 















'언어 > JAVA' 카테고리의 다른 글

chapter4. 연산자(Operator) (2)  (0) 2017.04.12
chpter4. 연산자(Operator)  (0) 2017.04.07
chapter3. 상수와 형변환(Type Casting)  (1) 2017.04.06
chapter2. 변수와 자료형  (0) 2017.04.05
chapter1 Java의 시작(2)  (0) 2017.04.04

<1 >

1

stream : 문자들의 흐름

file : 입출력이 가능한 모든것들에 대한 논리적 개념

 

2 file 을 사용하는 과정 : 스트림열기(fopen) -> 사용 -> 스트림 닫기(fclose)

 

 

<2>

1.

1)파일 열기 : FILE *fopen(const char *filename) , const char*mode);

*fimename: 읽어들일 file 이름

*mode : 파일에 대한 접근 방식

**file이 해당 프로젝트의 소스파일 안에 있을 경우 경로를 입력하지 않아도 된다.

 

 

2)mode : file 접근방식

"r": file을 읽기 전용으로 개방함 .                                     파일이 현재 존재 x 경우 에러가 발생했다는 의미로 NULL이 반환됨

"w": 현재의 내용을 파괴하고 쓰기 전용으로 개방함.             파일존재 x 경우 새로운 file 생성하고 쓰기전용으로 개방

"a" : 겹쳐쓰지 않고 기존 file 의 끝에 쓰기로 개방함.            파일존재 x 경우 새로운 file 생성하고 쓰기전용으로 개방 

"r+": file 을 읽기와 쓰기용으로 개방함.                             파일존재 x경우 에러가 발생했다는 의미로 NULL반환

"w+" : 현재의 내용을 파괴하고 읽기쓰기로 개방함.             파일존재 x경우 새로운 file을 생성하고 읽기쓰기용으로 개방

"a+" : 겹쳐쓰지 않고, 기존file의 끝에서 읽기, 쓰기로 개방함     파일존재 x 경우 새로운 file을 생성하고 읽기쓰기용으로 개방

 

 

 

3) 파일 닫기 : int fclose(FILE *fp);

fp: 읽어들임 작업을 마칠 file의 포인터

 

 

 

 

2. 파일 사용

1) file 출력 - 파일데이터 저장

-문자 : int fputc(int c, FILE *fp);

-서식화 출력 : int fprintf(FILE *fp, const char *format, ... );

-블록 출력 : size_t fwrite(const void *ptr, size_t size , size_t n, FILE *fp);

-문자열 출력 : int fputs(const char *s, FILE *fp);

 

 

2)file 입력 - 파일데이터 읽음

-한문자 입력 : int getc(FILE*fp);

-서식화 입력 : int fscanf(FILE *fp , const char*format,...);

-블록 입력 : size_t tread(void *ptr, size_t size, size_t n, FILE *fp);

-문자열 입력 : char *fgets(char *s, int n, FILE *fp);

 

 

 

3. 예

1) 입력 문자열 파일 쓰기

 

원래는 파일이 없었는데 w mode로 파일을 열어서 text파일이 생겼다.

 

 

결과 :

 

 

 

 

 

 

 

 

2) 파일 문자열 변수 저장

 

 

 

- file출력 과정에서 처음부터 0을 입력한 경우 :

test 파일이 없는 상태에서 시작했는데 test 파일이 생겨났고(파일여는과정에서 생김) 파일안에는 아무 내용도 없다.

 

 

 

- 여러 숫자 입력 :

 

 

-파일 출력 과정을 주석처리한 경우 : test파일이 생겨나지 않고 파일 입력 과정이 이뤄지지 않았다.

 

 

 

 

 

'언어 > C' 카테고리의 다른 글

3.31 구조체  (0) 2017.04.03
3.30 포인터2  (0) 2017.03.31

1. 구조체의 정의 

: 여러 자료형으로 메모리의 연속된 공간을 할당받아 사용하는 사용자정의 자료형 

-메인함수에서 호출할 때 자료형이 정의한 구조체 이름으로 쓰인다.

struct tag_name{


type 변수명;

type 변수명;

...
};

*struct : 구조체를 정의하기 위해 사용되는 자료형

*tag_name: 구조체를 구분하기 위해 사용되는 이름

*type : 각 원소들의 자료형

*변수명 : 구조체 원소, 멤버, 구성요소에 대한 이름



1) 구조체 선언 

#include <stdio.h>


struct phone{

char name[20];

int price;

};


void main()

{

struct phone phData={"스마트폰",2000};

}





or





typedef struct phone{

char name[20];

int price;

}PHONE;


void main(){

PHONE phData={"스마트폰", 2000};

}


*선언의 이용






2) 구조체 데이터 출력



3) 구조체 데이터의 복사



2. 중첩구조체 

: 구조체가 다른 구조체 변수를 포함하는것 ( 구조체 변수가 필드가 되는 형태) - 복잡한 자료형을 만드는데 있어서 편리함

( 다중구조체 or 포함구조체)



1) 기본형식




2)응용예시






3. 구조체 배열 : 구조체를 배열로 이용









4.구조체 포인터 

1) 구조체포인터의 선언


or




2) 구조체 포인터의 응용



-화살표 연산자 :  구조체포인터에서 구조체의 멤버를 역참조할때 사용된다.

(포인터이름 ->멤버이름) 

= ( *포인터명).멤버이름 과 같다.

-구조체의 멤버가 포인터일때 역참조법 :  

*구조체명.구조체안의포인터명 or *(*구조체의포인터명).구조체안의 포인터명


// 맨 앞의 * 가 가장 마지막에 실행된다. 








5. 포인터와 함수





실행순서 : main - (PHONE ph) - show 


** 자료형이 PHONE 임에 주의 





6. 자기참조 구조체 : 

-자기 자신을 가리키는 포인터를 멤버로 가지는 구조체 

-리스트, 트리 등 연결리스트 자료구조 구현에 사용


1) 기본 형식 




2) 응용





출처 ) KGITBank,  http://killernet.egloos.com/2380691


'언어 > C' 카테고리의 다른 글

4.3 파일입출력  (0) 2017.04.04
3.30 포인터2  (0) 2017.03.31

1. 포인터1복습

2. 포인터변수명에 상수 더하기

3. 배열과포인터

4. 주소전달방식

5. 퀴즈

 

 

 

 

1.

1) 포인터 선언과 초기화 , 역참조

 

역참조 (*포인터명) 포인터가 가지고 있는 주소값으로 가 그 공간안에 들어있는 값을 가져온다.

 

2)포인터 크기

 

 32비트 체계에서는 모든 포인터의 크기가 4byte 이다 (64비트 체계에서는 8비트)

 

 

 

 

 

 

 

2. 포인터변수에 상수 더하기(포인터변수명 + n)

: (포인터에 저장된 주소값 + 자료형크기 * n)

** int : 4byte , double : 8byte , float : 4byte , char : 1byte

 

 

 

 

 

 

 

 

 

3. 포인터와 배열

1)배열명은 배열이 시작하는 시점의 주소를 갖고있는 상수이다.

 

-선언과 초기화 방법

 

 

 

2)1차배열의 경우 *(포인터명 + 원소번호), 포인터명[원소번소]로 값에 접근할 수 있다

 

(가정 : 배열은 주소 100부터 시작하고 포인터P=a; 과정을 마친상태)

 P(100)   P+1(104)   P+2(108)   P+3(112)    P+4(116)        --주소

 *P         *(P+1)    *(P+2)     *(P+3)      *(P+4)              --포인터
 a[0]         a[1]       a[2]        a[3]        a[4]                --배열
 10          20          30         40          50

 

 P=a , P+i = a+i  , *(p+i)=*(a+i) , P[i]=a[i]

 

(첫번째 printf문이 중요)

 

 

++)scanf_s에서의 주소입력에서의 포인터 사용

 

 

 

 

 

3)포인터배열

(pta의 시작주소가 100이라고 가정, a, b, c의 주소가 순서대로 들어있다고 가정)
   pta+0 -100                                 :  pta[0]의 주소(배열명은 다 주소)
 *(pta+0) -pta[0] - a의 주소 : pta+0이라는 주소에 들어있는 값 : pta[0]=&a
 *(*(pta+0)) -*pta[0]-*a의주소-a : pta[0]이라는 주소에 들어있는 값=a
 

 

 

 

 

 

 

 

 

4. 주소전달방법(함수에서 이용): 참조에 의한 전달 -call by reference *포인터이용
-호출함수의 변수 주소를 넘겨주는 방식이다
-호출함수의 변수에 영향을 줄 수 있다
-여러개의 결과값을 호출함수로 돌려주는 효과가 있다 (원래 리턴은 한개만 할수 있음 )

 

**일반적인 전달 방식 : 값에 의한 전달 = call by value
-호출함수의 변수값을 복사해서 전달하는 방식
-호출함수의 변수에는 아무런 영향을 주지 않는다

1.인자값으로 주소넘겨주는 외부함수 안에서 메인함수 안의 그 주소값에 해당하는 변수를 이용할 수 있다
2.주소값을 보냈을 때는 변수가 변할수도 있으니 하나하나 확인해줘야 한다.

 

 

 

 

 

 

 

*퀴즈 풀어보기*

 

 

'언어 > C' 카테고리의 다른 글

4.3 파일입출력  (0) 2017.04.04
3.31 구조체  (0) 2017.04.03

+ Recent posts