코락 CoRock
코딩하는 락스타
코락 CoRock
  • 분류 전체보기 (393)
    • frameworks (19)
      • spring (19)
      • spring-boot (0)
      • testing (0)
    • languages (94)
      • java (39)
      • kotlin (0)
      • python (42)
      • r (13)
    • libraries (0)
    • programming (239)
      • android (13)
      • c (17)
      • cpp (22)
      • database (18)
      • design-pattern (4)
      • data-structures (11)
      • git (8)
      • hadoop (6)
      • html-css (7)
      • issue (4)
      • javascript (26)
      • jsp (34)
      • os (29)
      • php (6)
      • preferences (19)
      • etc (15)
    • discography (37)
      • k-pop (18)
      • pop (19)
    • blog (3)

블로그 메뉴

  • Programming
  • Java
  • JavaScript
  • Discography
  • K-Pop Songs
  • Pop Songs
  • Blog
  • Guestbook

공지사항

인기 글

태그

  • Android
  • CentOS
  • jsp
  • javascript
  • Java
  • r
  • 파이썬
  • 자바스크립트
  • oracle
  • python
  • Spring
  • linux

최근 댓글

최근 글

티스토리

반응형
hELLO · Designed By 정상우.
코락 CoRock

코딩하는 락스타

programming/cpp

[C++] Pointer

2018. 3. 5. 15:28
반응형

Definition of Pointer

 : 주소를 저장하는 변수


Pointer = point + ~er (지시자)

Point == address

4byte -> 주소를 저장하는  변수

기능 4가지

1

2

3

4

 

모양꼴

가리키는 타입 *변수명;


cf. 함수는 코드영역에 잡힌다

그 이름을 알아야 호출을 할 수 있다



 ㆍ 주소


  1. &변수명

  2. 배열명

  3. 함수명

  4. 문자열

  5. 포인터



#4. 문자열

C++에서는 헤더파일 <String.h> 하면 String 클래스를 쓰는 거다

#include <string.h> : 문자열 관련 함수들이 모여있는 함수 라이브러리


근데 C에서 썼던 String 헤더파일을 쓰고싶다

그럴 땐 #include <cstring> 을 붙여라!


#include <string.h> 는 클래스를 갖다쓰는거고

#include <cstring> 함수를 갖다쓰는 거다!


Facilities of Pointer

포인터의 4가지 기능은 다음과 같다.



 ㆍ 포인터의 4가지 기능


  1. 포인터는 오직 주소만 받을 수 있다.

  2. 받은 주소의 값을 알 수 있다.

  3. 받은 주소의 값을 변경할 수 있다.

  4. 주소 이동이 가능하다.



#1. 주소를 받지 않으면 일하지 말란 얘기야

항상 정확한 주소를 계산할 줄 알아야 한다!

1번을 하지 않으면 그 이후는 진행하지 마라!


#4. 포인터의 가장 좋은 점은 1:1방식 이라는 것!

동시에 잡지 못하지만,


ex. int a = 10;


int *p; : 나는 포인터야; int를 가리키는

포인터는 간접변수이기 때문에 항상 읽을 때 '가리키는'을 붙이는 습관을 들여라!


&p : 포인터가 가리키는 주소값

p : 포인터가 가리키는 값

*p : 포인터 자신의 주소


*p = &a; 일때

p를 읽을 땐 p가 '가리키는' 주소값 ==> a의 주소


Address Expression

주소 표현식은 다음과 같다.



 ㆍ 주소 표현식(Address Expression)


  1. 포인터는 오직 주소만 받을 수 있다.

  2. 받은 주소의 값을 알 수 있다.

  3. 받은 주소의 값을 변경할 수 있다.

  4. 주소 이동이 가능하다.



1.

2.

3. 이 세번째를 하기 위해서 1번, 2번이 존재한다

4. [] *를 바꿔서 호환할 수 있다

★중요한 건, 본래 의미는 바뀌지 않는다!


포인터는 될 수 있으면 움직이지 않는 것이 좋다

휘발성(volatileness)이 있는 포인터들은 움직이면서 하고 아닌 것들은 위처럼 하는 것이 좋다


Dynamic Memory Allocation

 : 런타임 시 임의적으로 힙 영역에 메모리를 할당하고 해제할 수 있는 제도


new / delete


ex. int *p = new int;    // 할당하는 순간에 포인터가 잡아야 한다!

delete p;


int *pp = new int[10];

delete []pp;


int *p;

p = new int[3];


cf. in C : (int *)malloc(sizeof(int));


위의 new는 연산자다!

c++에서 연산자의 의미는 중요하다!

연산자로도 함수를 만들수 있다(operator function)


delete p;


※ 1개 해제할 때랑 3개 해제할 때랑 방식이 다르다!


delete []p;


delete p; 해도 에러는 나지 않는다. 다만 좀비 프로세스가 존재하게 된다.


항상 기억!

int *p = new int[1];    // 1개를 할당할 때도 꼭 이렇게 하자

소멸자는 1개밖에 없기 때문에 1개의 형식만 쓸 수 있다 (delete[]p;) 하기위함

http://corock.tistory.com/74 참고





Right-Left Rule

1. right

2. left


1. 정체 파악

2. 용도 파악


ex.

1. int *p[3];

1. [3] (배열)

2. int *(용도)


==> "포인터 배열" 
왜 쓰냐? -> 배열을 쓰는 이유? -> 포인터의 일괄처리를 하기 위해서(떨어져 있는 메모리를 일괄처리하기 위해서)


2. int (*p)[3];

1. *

2. int [3];

=> 한 행당 요소를 3개 가지고 있는 2차원 배열을 가리키겠다는 뜻


3. int **p;


※ 한번 읽은 건 절대 또 읽으면 안된다!


Program



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
void main()
{
    // declaration
    int a[2][3] = { 6, 5, 4, 3, 2, 1 };
    int i, j;
    int(*p)[3];
 
    // initialization
    p = a;
 
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 3; j++) {
            cout << a[i][j]<< "\t" << p[i][j] << "\n";
            cout << *(a[i] + j) << "\t" << *(p[i] + j) << "\n";
            cout << *(*(a + i) + j) << "\t" << *(*(p + i) + j) << "\n";
        }
        cout << endl;
    }
}
Colored by Color Scripter
cs




레퍼런스의 특징

한번 지정하면 바꿀 수 없기 때문에 명확하다


반응형
저작자표시 비영리 변경금지 (새창열림)
    'programming/cpp' 카테고리의 다른 글
    • 성적처리프로그램
    • [C++] setw()
    • [C++] Array
    • [C++] Welcome to C++ Programming
    코락 CoRock
    코락 CoRock
    A COder dreaming of being a ROCKstar

    티스토리툴바