Busan IT/공장내 Network2015. 4. 17. 17:36

포인터와 3차원 배열

 

학습목표 - 포인터를 활용한 3차원 배열의 값과 주소를 알 수 있다.

 

배열에서의 교환법칙에 대하여 배워본다.

ex) A[2]; 2[A]; 의 값은 같다.

p/346 2차원 배열 예제

 

배열에 값을 넣지 않을 때 빈자리는 0으로 채워짐을 알 수 있다.

 

 

 

 

p/351 삼차원 배열 예제

 

 

 

p/358 Ch. 17. 포인터의 포인터에 대한 이해

 

포인터 변수를 선언할 때 쓰인 별의 수만큼 별을 삽입하여 사용할 수 있다.

p/359 예제

 

 

p/361 예제

p/361 예제

라즈베리파이 회로도 훑어보기

 

https://www.raspberrypi.org/model-b-revision-2-0-schematics/



반응형
Posted by newind2000
Busan IT/공장내 Network2015. 4. 16. 17:35

포인터를 활용한 1/2차원 배열의 값과 주소

 

학습목표

 

1차원 배열의 값과 주소에 대해 이해하고 여러 가지 형태를 사용하여 출력할 수 있다.

2차원 배열의 값과 주소에 대해 이해하고 여러 가지 형태를 사용하여 출력할 수 있다.

 

지난 시간에 이어 2차원 배열에 대하여 수업을 해 보아요. \=_=/ \=_=/

시간이 남아 퓨전...(드래곤볼 참조)

 

... \=_=/ \=_=/

... o-(=_=)o- -o(=_=)-o

... /=_=/ \=_=\

 

 

배열에서 배열의 이름자체는 배열의 주소 값을 나타낸다.

ex) A[5]; printf("%p", A); -> A의 주소 출력

 

 

int A[5]라는 배열이 있다고 하면,


A는 주소 값으로써 상수이고 p는 주소 변수이다.

 

p가 변수임을 확인해 보자.


p는 대입연산자(=)를 활용하여 그 값을 변할 수 있는 주소 변수임을 알 수 있다.

하지만 배열 A 또는 B는 주소 값을 나타내는 주소 상수로써 값을 변화 시킬 수 없다.

변수와 상수의 차이라는 점을 제외하고는 배열의 이름과 주소 상수는 똑같이 사용할 수 있다.

 

/*** 네트워크 삼천포 ***/





natservice가 있을 때 이것을 삭제해야 컴퓨터가 정상적으로 가동한다.

 

삭제하는 방법 http://todaki.tistory.com/2646

 

각설! 네트워크 삼천포 break;

--------------------------------------------------------------------------

 

배열의 타입은 int[X]이다. // X는 선언 시 입력한 상수.

 

const를 어떻게 쓰느냐에 따라 고정되는 값이 다르다.

 

 

포인터 변수 int * p에서,

 

const* 앞에 붙이면 *가 가리키는 값을 수정할 수 없고,

const를 변수명 바로 앞에 붙이면 가리키는 주소 값을 바꿀 수 없게 된다.


 

2차원 배열로 넘어가서,

 

우선 for문을 사용하여 값과


 

차원수만큼의 대괄호([])가 있으면 그것은 값을 뜻한다.

차원수만큼의 포인터(*)가 있으면 그것은 값을 뜻한다.

그러므로 대괄호의 역할을 포인터가 할 수 있다. 또한 포인터의 역할을 대괄호가 할 수 있다.

정리하면 대괄호의 수 + 포인터의 수 = 차원수 가 되면 값을 뜻한다.

대괄호의 수와 포인터의 수가 차원수보다 작게 되면 그것은 주소를 뜻한다.

 

코드와 결과 값!

 

/*** 2dimArry.c ***/

#include <stdio.h>

int main(void)
{
  /*** 사용자의 가독성을 생각한 배열 코딩 ***/

  int A[2][3]= {  {1,2,3},
      {4,5,6}
               };
  int iCnt1;  //행의 출력을 위한 카운터   
  int iCnt2;  //열의 출력을 위한 카운터

  for(iCnt1=0; iCnt1<2; ++iCnt1)
  {
    for(iCnt2=0; iCnt2<3; ++iCnt2)
    {
      printf("[%d]", A[iCnt1][iCnt2]);    
    }
    putchar('\n');
  }

  putchar('\n');
  
  for(iCnt1=0; iCnt1<2; ++iCnt1)
  {
    for(iCnt2=0; iCnt2<3; ++iCnt2)
    {
      printf("[%08X]"&A[iCnt1][iCnt2]);    
    }
    putchar('\n');
  }
  putchar('\n');

  printf("A[0][0]의 값은    [%d]입니다.\n", A[0][0]);
  printf("*(A[0]+0)의 값은  [%d]입니다.\n", *(A[0]+0));
  printf("*((*A+0)+0)의 값은  [%d]입니다.\n", *((*A+0)+0));
  printf("*(A[0])의 값은    [%d]입니다.\n", *(A[0]));
  printf("**A의 값은    [%d]입니다.\n\n", **A);

  printf("A[1][2]의 값은    [%d]입니다.\n", A[1][2]);
  printf("*(A[1]+2)의 값은  [%d]입니다.\n", *(A[1]+2));
  printf("*((*A+2)+3)의 값은  [%d]입니다.\n\n", *((*A+2)+3));

  printf("A[0][0]의 주소는  [%08X]입니다.\n"&A[0][0]);
  printf("(A[0]+0)의 주소는  [%08X]입니다.\n", (A[0]+0));
  printf("((A+0)+0)의 주소는  [%08X]입니다.\n", ((A+0)+0));


  return 0;

}

 


 


 

 

 

반응형
Posted by newind2000
Busan IT/공장내 Network2015. 4. 15. 17:45

다차원 배열의 값과 주소

 

학습목표 - 다차원 배열의 값과 그 주소 값의 결과를 이해할 수 있다.

 

p/338 Ch.16. 다차원 배열

 

행렬에서 행은 가로줄, 을 쓸 때 -부터 쓰고 가로로 움직인다. 가로줄

열은 세로줄, 을 쓸 때 위에서 아래로 세로로 움직인다. 세로줄

 

p/339의 예제

 

(가로 입력 값 * 세로 입력 값) * 변수형의 크기 임을 알 수 있다.

 

p/342 예제

Define을 컴파일 시 지정하여 컴파일 할 수 있다. 명령어는

‘/D‘#define의 역할을 한다.

띄우지 않고 ‘define을 원하는 변수명 = 넣고 싶은 값을 넣으면 #define 형태의 명령어를 컴파일 시 삽입할 수 있는 것이다.

 

 

이중 for문을 활용하여 사람이 이해하기 쉬운 형태의 배열로 표현해 보자.

 

NM의 값을 입맛대로 바꿔서 코딩해보자.

 

2차원 배열의 주소는 메모리상에 연속으로 만들어진다.

 


 

배열에서 주소 값이 똑같은 것

 

배열이름

대괄호 하나의 주소값




 

배열이름에 + XX만큼 줄 이동

배열[] + XX만큼 칸 이동

 

** 칸 이동은 선언된 변수형의 크기만큼 된다.

 

배열에 &를 붙이면 배열 전체의 주소를 뜻한다. 때문에 해당 주소 값에 1을 붙이면 배열의 마지막 주소에서 선언된 변수의 크기만큼의 값이 더해지는 주소 값이 나오게 된다.

 

정리해보면, 2차원 배열에서

 

&배열 이름 - 배열 전체의 주소

배열 이름 - 배열 1

배열[] - 배열 1

&배열[][] - 배열 1

 

 

 

1차원 배열에서는

 

&A + 1 - 1차원 배열 크기만큼 이동

A +1 - 한 칸 이동

 

&*이 만나면 서로 상쇄되어 본래의 값이 된다.

 

*A = *&A[0]

*A = A[0]

 

*(A+1) = A[1]

 

배열의 값을 표현하는 방식은 2가지이다.

 

배열자체의 이름을 출력하는 방법과 포인터를 사용하여 출력하는 방식이 있다.

 

복잡해 보이지만 이해하는 방법은 간단하다.

 

배열자체를 적으면 그것은 주소를 뜻한다. 때문에 거기에 포인터(*)붙혀주면 해당 값을 찾아가게 되는데 &*이 붙으면 그 값은 상쇄되어 값을 도출하게 된다.

 

1차원 배열에서 A+1은 배열의 가장 처음에서 한 칸을 이동한 주소 값을 가지게 된다. 여기에 포인터를 붙이면 *&는 상쇄되어 해당 값을 가지게 된다.





 

 

 

 

 

 

 

 

반응형
Posted by newind2000
Busan IT/공장내 Network2015. 4. 14. 17:37

구조체와 사용자 정의 자료형

 

학습목표

 

- 구조체, 공용체, 열거형을 이해하고 사용할 수 있다.

 

 

/*** Linux 기초***/

 



---------------------------------------------------------------------------------




 

호출 시 포인터를 활용하면 reference방식이라 하고 호출 시 값을 사용하면 value방식이라 한다.

 

복잡한 구조체를 복사하는 것보다 포인터를 활용하여 해당 주소 값을 가리켜주면 메모리를 적게 차지하고 속도도 향상되는 장점이 있다. reference방식으로 코딩을 해보자.


compiler는 변수를 만들 때 메모리의 크기를 알 수 없으면 변수를 만들 수 없다.

하여 중첩 구조체를 만들 때 이미 선언된 구조체를 다음에 만들어주어야 한다.

공용체는 union이라는 키워드를 사용해서 정의한다. 문법은 구조체와 동일하고 뒤에 사용되는 변수의 값이 이전의 있던 변수 값에 덮어 씌어지게 된다.

p/489 예제

유니온은 주소 값이 동일하다!

 

p/489 예제






다음 시간에는 2차원 배열에 대해서 배운다!


 

반응형
Posted by newind2000
Busan IT/공장내 Network2015. 4. 13. 17:48

Linux 기초 및 구조체의 메모리 구조

 

학습목표 - 구조체가 메모리에 어떻게 저장되는지 이해한다.

 

Lesson 4. 디렉토리와 파일

 





 

디렉토리와 디렉토리 안에 들어있는 파일들.

 

etc: 패스워드 파일, 쉐도우 파일, 리눅스 파일 설정 파일

proc: 프로세스들이 파일 형태로 저장되는 디렉토리

root: 루트의 홈 디렉토리가 저장되는 곳

var: 시스템 운영 중에 생성되는 임시 파일과 외부 접속에 대한 로그파일 저장

bin: 기본적인 실행 파일

tmp: 누구나 파일을 올릴 수 있는 작업공간

home: 일반 사용자들의 아이디와 그들의 작업공간

 

네트워크

 

나무 줄기에서 여러 가지가 뻗어나가듯 하나의 중앙과 가지식으로 연결된 모양을 스타형, 방사형이라고 한다.

 

근거리 네트워크(LAN: Local Area Network)

 

이더넷(Ethernet)LAN을 위해 개발된 네트워크 기술로, ‘이더넷이라는 이름은 빛의 재질로 여겨졌던 에테르(ether)에서 유래되었다.

 

광역 네트워크(WAN: Wide Area Network)은 근거리 네트워크의 상위 개념이다.

인터넷(Internet)은 광역 네트워크에 상위 개념이다.

 

데이터를 외부로 송출하기 위해서는 데이터의 통로인 게이트웨이의 주소를 알 필요가 있다. 통상적으로 게이트웨이의 주소는 마지막 자리에 1을 넣고 브로드캐스트는 255를 사용한다.

때문에 1번과 255IP로 할당되지 않는다.

 

C언어

 



 

구조체의 이름은 생략 가능하다!

 

ex)

 

typedef struct simple

{

. . .

} SoSimple;

 

다시 linux로 넘어가서...

 






 

p/460 예제



명령어 catconcatenate의 약자로써 파일의 속 내용을 출력하는 기능을 한다.












 

stack구조에서 메모리의 위치는 아래서부터 위로 차고 올라오는 구조를 가진다.

하지만 배열에서는 해당메모리를 잡아놓고 위에서부터 차고 내려오게 된다.

컴파일러의 처리용량이 어떻느냐에 따라서 메모리에 데이터가 저장되는 모양이 결정된다.

32bit의 경우 4byte가 데이터 처리의 기준이다. 4byte기본 처리 단위에서 char가 선언된 후에 short 변수가 선언되면 중간에 1byte가 비게 되는 현상이 발생한다.

/*** memory.c ***/

#include <stdio.h>

typedef struct
{
  
  int A;
  char B;
  short C;
  int D;
  char E;
  short F;
  char G;
  int H;  //여기까지 24byte

  char I,J;
  short K;

  

  

} smart;

int main(void)

{
  printf("smart의 크기는 [%d]입니다.\n"sizeof(smart));
  

  return 0;

}

 

 

반응형

'Busan IT > 공장내 Network' 카테고리의 다른 글

다차원 배열의 값과 주소  (0) 2015.04.15
구조체와 사용자 정의 자료형  (0) 2015.04.14
구조체 포인트, linux 기초  (0) 2015.04.10
리눅스 기본  (0) 2015.04.09
고정 네트워크 설정  (0) 2015.04.07
Posted by newind2000
Busan IT/공장내 Network2015. 4. 10. 17:37

구조체 포인트, linux 기초

 

학습목표

 

- 구조체 포인터를 사용할 수 있다.

- 해커스쿨 training을 학습하고 개념을 이해한다.

 

Lever2, trainer2로 접속한다.

 

디렉토리 만드는 명령어 mkdir '파일명

디렉토리 지우는 명령어 rmdir '파일명

 

 

네트워크와 C수업을 하자.

 

typedefC언어임으로 끝에 세미콜론을 붙힌다.

 

typedef_'oldtype'_'newtype';

 

긴 타입을 짧게 쓰기 위해 만들거나 혹은/또한 사용자가 이해하기 쉽게 만들기 위해 사용한다.




 

비트필드구조체란 세미콜론뒤에 적힌 비트를 해당 변수에 지정해 주는 것이다.

비트필드는 과거 메모리 용량이 부족할 때 용량을 비트 단위로 할당해주기 위해 사용했던 것이다. 하지만 CPU가 비트단위로 연산을 하다보면 느려짐으로 사용하는 것을 추천하지 않는다.

 

비트필드구조체 사용의 예,

 

unsigned char A:4;

unsigned char B:4;

 

 

p/460 22-2; 구조체와 배열 그리고 포인터

 

예제 p/460,

 

p/462 예제

 

struct는 배열처럼 이름자체가 주소를 가리키지 않는다.

*p 에 괄호를 치는 이유는 dot 연산자(.)가 처리 우선 순위를 갖기 때문이다.



 

Training Lesson 3

 

터미널<콘솔>과 네트워크에 관한 명령어들에 대해서 배운다.

현재 해커스쿨 서버에 어떤 사람들이 접속해 있는지 보고, 그 사람들과 대화를 하는 방법 등을 배운다.

 

서버 접속을 텔넷을 통해 했을 때

- 터미널을 통해 접속

 

서버 접속을 리눅스 설치 후 보팅하여 로그인 했을 때

- 콘솔을 통해 접속

 

// 211.179.125.85




 

p/464 예제,

 

p/465 예제,

p/467 예제

구조체 변수의 주소 값은 구조체 변수의 첫 번째 멤버의 주소 갑과 동일하다.


 

 

네트워크에 대하여 알아보자.

 

통신의 시초는 미국방성에서 전쟁 관련 기술 개발을 위해 미국국방연구소인 DARPAAT&T의 벨 연구소 그리고 UC. Berkeley 3개의 단체에서 실험한 통신에서 유래했다.

 

VPN(Virtual Private Network)

 

반응형

'Busan IT > 공장내 Network' 카테고리의 다른 글

다차원 배열의 값과 주소  (0) 2015.04.15
구조체와 사용자 정의 자료형  (0) 2015.04.14
Linux 기초 및 구조체의 메모리 구조  (0) 2015.04.13
리눅스 기본  (0) 2015.04.09
고정 네트워크 설정  (0) 2015.04.07
Posted by newind2000

리눅스 기본

 

학습목표

 

Hackerschool에 접속하여 리눅스 기본에 대하여 공부한다.

- 디렉토리 정보 파악

- 디렉토리와 디렉토리간의 이동

- 새로운 디렉토리의 형성, 삭제, 파일의 복사, 이동, 삭제

 

 

 

<Training Lesson1>

 

리눅스는 대소문자를 확실히 구분한다는 특징을 가지고 있다.

 

DOSdir기능처럼 디렉토리를 보는 명령어는 ls 이다. ls -l 은 디렉토리의 상세 내역을 보여준다.

 

 

파일명이 -로 시작하면 파일이라는 뜻이다.

 

시작명이 -가 아닌 경우는 디렉토리라는 뜻이다.

 

리눅스에서는 설정파일과 같은 중요한 파일들은 숨겨져 있는데 이것을 보는 명령어가 ls -a 이다.

 

숨겨진 파일은 파일명 가장 앞부분에 “-”이 들어가 있는 특징을 가지고 있다.

 

파일명 앞에 .을 붙이면 그 파일은 숨겨진 파일로 변하기 된다.

 


<Training Lesson 2>

 

- 디렉토리와 디렉토리간의 이동

- 새로운 디렉토리의 형성, 삭제, 파일의 복사, 이동, 삭제

pwd는 현재 경로를 출력하는 명령어이다.

 

한 단계 위로 가는 명령어는 cd .. 이다.

 

cd ‘이동을 원하는 디렉토리를 치면 원하는 디렉토리로 이동한다.

 

//cd change directory의 약자이다.

 

cd / 는 최상위 디렉토리로 이동하는 명령어이다.



 

 

 

 

 

 

 

반응형
Posted by newind2000

고정 네트워크 설정

 

학습목표

 

- 기본 IP 환경 설정 방법과 DHCP에 대해서 안다.

- Raspberrypie의 네트워크 환경 설정을 할 수 있다.

 

IP 주소를 변경해 보자! 리눅스에서는 IP가 충돌되면 인터넷을 사용할 수 없음으로 리눅스 사용 전 고정 IP로 바꿔야 한다.

 

 

 

 

IPv44byteunsigned형으로는 대략 40억개의 IP를 만들 수 있다. 하지만 인구가 증가하고 인구당 1개 이상의 IP를 사용함으로써 IP부족 현상을 보이기 때문에 IP의 확장이 필요함에 따라 4byte에서 16byte체계 IPv6를 구축.

 

임시적으로 DHCP를 사용하여 인터넷을 사용할 때마다 IP주소를 할당해준다. DHCP에게 IP주소를 할당 받으려면 네트워크가 구축되어 있어야 한다.


 

Window 네트워크 IP주소는 본인출석번호 + 10을 한다. 본인번호는 33

Linux 네트워크 IP주소는 출석번호 + 50을 한다. 본인번호는 83


라즈베리파이를 사용한 네트워크 설정


사용 명령들

 

1. IP 설정 1

 

sudo nano /etc/network/interfaces

 

 

 

iface eth0 inet static

 

address 192.168.0.XXX

 

netmask 255.255.255.0

 

gateway 192.168.0.1

 

network 192.168.0.0

 

broadcast 192.168.0.255

 

 

 

2. IP 설정 2

 

sudo ifconfig eth0 192.168.0.XXX broadcast 192.168.0.255 netmask 255.255.255.0

 

 

3. DNS 설정

 

sudo nano /etc/resolve.conf

 

nameserver 219.250.63.130

 

nameserver 210.94.0.7



*참고 링크

http://echo.tistory.com/35










 

반응형

'Busan IT > 공장내 Network' 카테고리의 다른 글

다차원 배열의 값과 주소  (0) 2015.04.15
구조체와 사용자 정의 자료형  (0) 2015.04.14
Linux 기초 및 구조체의 메모리 구조  (0) 2015.04.13
구조체 포인트, linux 기초  (0) 2015.04.10
리눅스 기본  (0) 2015.04.09
Posted by newind2000