for Robot Artificial Inteligence

포인터, 더블포인터 쉽게 이해하기

|

포인터와 reference와 관계를 이해하려면 아래와 같이 이해하면 된다

int x // 0차원
int *p // 포인터 1차원

p = x // 1차원인 포인터가 0차원을 가리키는것은 address이다.
p = &x // ref 1 차원이 맞으며 Address가 아닌 element를 가르킨다

즉,

포인터는 기본적으로 요소의 address를 가르키게 된다.

int *p;
int x = 5;
*p = x;

포인터가 일반적인 변수의 요소를 가르키고 싶으면 이때 Reference를 붙여줘서 address에서 element로 up시켜주면 된다.

높은 차원을 가지고 있는 element를 가르키고 싶은 경우 포인터 수를 늘려서 요소를 가르키면 된다.(행렬은 기본적으로 요소를 포인팅 한다)

행렬의 element는 pointer로만 접근 하거나 “[]”로 얻을 수 있다.

이에 포인터로 행렬의 element를 접근을 하려면 차원의 수에 디펜던시로 포인터를 추가한다.

즉 2D array이면 더블포인터로 차원수를 맞춰주고 3D면 트리플포인터로 접근을 해야된다.

#include <iostream>
using namespace std;
void prn(int *pa, int size);
int main()
{
  int a[5] = {10,20,30,40,50};
  prn(a,5);
}
void prn(int * pa, int size) // POINTING ARRAY
{
  for(int i = 0; i<size; i++)
  {
    cout <<"\t" <<(*pa+i); // pa[i]로도 표현 가능
  }  
}
#include <iostream>
using namespace std;
void main()
{
  int a[5] = {10,20,30,40,50};
  int b[5] = {60,70,80,90,100};

  int *p[2] = {a,b}; // p pointing a, b array

  cout<<p[0][0]; // 10
  cout << p[1][0]; //60
}
#include <iostream>
using namespace std;
#define ROW 3;
#define COL 4;
void main()
{
  int a[ROW][COL] = { {90, 85, 95,100},
                      {75, 95, 80, 90},
                      {90, 80, 70, 60}};
  int r,c;
  for(r=0;r<ROW;r++)
  {
    for(c=0;c<COL;c++)
    {
      cout<<* ( *(a+r)+c); // a is init addres and + + // all the elements is 4 byte neighbors following previous one.
    }
  }
}

함수 포인터를 사용해서 함수 호출하기

#include <iostream>
using namespace std;
/* 함수를 가리키는 포인터 변수 선언 */
void(*pf)(void);
void one()
{
  cout<<"one";
}
void two()
{
  cout<<"two";
}
void three()
{
  cout<<"three";
}
void main()
{
  pf = one;
  pf();

  pf = two;
  pf();

  pf = tree;
  pf();
}

Comments