Acdong
Learn by doing
Acdong
전체 방문자
오늘
어제
  • 분류 전체보기
    • Economy
      • Saving Money
    • Self-improvement
    • Thoughts
    • Machine learning
      • Deep Learning
      • Chatbot
      • NLP
    • MLops
      • AWS
      • Container
      • Serving
    • Computer Vision
    • Data Science
      • ADsP
      • R
    • Project
    • Python
      • Data Structure & Algorithm
    • C,C++
    • API
      • ElasticSearch
    • Error Note
    • Network
    • RDBMS
      • SQL

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • [GitHub]

인기 글

태그

  • Python
  • sbert
  • R시각화
  • nlp
  • pandas
  • 어텐션
  • 데이터 전처리
  • Numpy
  • c포인터
  • R그래프
  • 이미지 전처리
  • 존댓말 반말 분류
  • plot()
  • SentenceTransformer
  • 기계학습
  • 회귀계수
  • 머신러닝
  • R
  • 포인터
  • 다중공선성

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Acdong

Learn by doing

[C,C++] 이중 포인터
C,C++

[C,C++] 이중 포인터

2019. 2. 25. 17:12
728x90

이중 포인터

 

​

포인터 변수를 가리키는 포인터

= 포인터의 포인터

​

포인터 변수도 메모리를 차지하고 있으므로 이 변수도 당연히 번지가 있다.

그래서 이중포인터를 선언할 수 있다.

​

이중 포인터 변수를 선언할 떄는 * 구두점을 두 번 연속해서 쓴다.

​

int **ppi;

 

= 정수형 대상체를 가리키는 포인터 변수의 번지를 가리키는 포인터

 

int **ppi == (int *) *ppi;​


ex) dbIPointer

{

int i;

int *pi;

int **ppi;

​

i = 1234;

pi = &i;

ppi = π

​

printf("%d\n",**ppi);

}

 

​

정수형 포인터 pi가 i의 번지를 가지고 정수형 이중 포인터 변수 ppi에는 pi의 번지를 대입해 놓고 ** 값을 읽으면 결국 i값이 읽혀진다.

​

i = *pi = **ppi

&i = pi = *ppi

*&i = *&*pi = *&**ppi

​

* 연산자와 & 연산자는 서로 반대되는 동작을 하는데 이 두 연산자에 의해 가리키고 끄집어 내오다보면 동등한 수식이 여러 개 생길 수있다.

​

*& 가 붙어있으면 상쇄된다.

​

ex) FuncAlloc

void inputName(char **pName)

{

*pName = (char *)malloc(12); // 동적메모리 할당

strcpy(*pName,"Cabin"); // "Cabin"이 가리키는 char 형 문자열을 *pName 이 가리키는 곳에 복사한다.

}

​

void main()

{

char *Name;

 

InputName(&Name);

 

printf("이름은 %s입니다\n",Name);

free(Name);

}

description )

main 에서 char *형의 변수 Name을 선언하고 이 포인터 변수의 번지, 즉 char **형의 이중 포인터를 InputName 함수로 전달했으며 이 함수는 이중 포인터를 형식 인수 pName으로 대입받는다.

 

 

 

 

 

Name은 함수 내부에서 값이 결정되는 출력용 인수이기 때문에 호출원에서 초기화 하지 않아도 상관없다.

 

이중 포인터를 쓰는 이유 ?

포인터 타입의 주소를 함수의 인자로 받으려고 사용한다.

 

이

 

 

 

 

참조 호출 // 위에 내용이해를 위한 포인터 호출

 

ex) 변수값을 1 증가시키는 plusref 함수

#include < studio.h >

 

void plusref(int *a) // 함수 선언

 

void main()

{

int i ;

i = 5;

plusref(&i);

printf("결과 = %d\n",i);

}

void plusref(int *a)

{

*a = *a + 1 ;

}

 

 

result )

결과 = 6

 

description )

참조 호출은 실인수의 값을 전달하는 것이 아니라 실인수의 번지를 전달하는 방식이다.

&i는 i가 들어있는 번지인데 이 번지를 plusref 함수로 전달했다.

plusref 함수는 이 번지를 a로 받아서 *a = *a+1; 연산을 수행했다.

 

 

 

 

 

 

re

반응형

'C,C++' 카테고리의 다른 글

[C#] Class 클래스 사용_Random 과 List  (0) 2019.04.11
[C,C++] 배열과 포인터  (0) 2019.02.28
[C,C++] 포인터 동적 메모리 할당  (0) 2019.02.25
[C,C++] 포인터 연산  (0) 2019.02.25
[C,C++] 포인터의 정의 , 포인터 란?  (1) 2019.02.25
    'C,C++' 카테고리의 다른 글
    • [C#] Class 클래스 사용_Random 과 List
    • [C,C++] 배열과 포인터
    • [C,C++] 포인터 동적 메모리 할당
    • [C,C++] 포인터 연산
    Acdong
    Acdong
    E-mail : alswhddh@naver.com / 자연어처리와 MLops 를 연구하고 있는 스타트업 개발자입니다.

    티스토리툴바