for Robot Artificial Inteligence

1. Essential concept(Array, Complex Number, Reference, Pointer)

|

Array

int main()
{
  int A[5];
  int B[5] = {2,4,6,8,10};
  int i ;
  size_ = sizeof(B)/sizeof(B[0]);
  for (i=0; i<size_; i++)
  {
    std::cout<< i;
  }
}

Structure

  • Defining Structure
  • Size of structure
  • Declaring a Structure
  • Accessing Member.
struct Rectangle
{
  int length; // int is 4byte in c++
  int height;
};
int main()
{
  struct Rectangle r = {10, 5};
}

struct Rectangle
{
  int length; // int is 4byte in c++
  int height;
};
int main()
{
  struct Rectangle r; // Declare
  struct Rectangle r = {10, 5}; //ininitlaize
  r.length = 15;
}

Complex No

struct Complex
{
  int real; // 4byte
  int image; // 4byte
} // 8 bytes
struct student
{
  int age; // 4byte
  char name[25]; // char is 1 bytes , 25 bytes
  char dept[10]; // 10 bytes
  char address[50]; // 50 bytes
}// 89 bytes

Example

struct Card
{
  int face;
  int shape;
  int color;
}; // 12bytes
int main()
{
  struct Card c;
  c.face = 1;
  c.shape = 0;
  c.color = 0;
}

struct Card
{
  int face;
  int shape;
  int color;
}; // 12bytes
int main()
{
  struct Card deck[52] = {1,2,3}, {2,0,0}, ... ,{1,1,0},{2,1,0};
  std::cout << deck[0].face;
  std::cout << deck[0].shap;
  ...
}
// 원래는 deck Rvalue에다 {}를 더해야되는데 이상하게 blog에다 쓰면 오류 떠서 안됨..

pointers

  • Declaration
  • Initialisation
  • Dereferencing
  • Dynamic Allocation

  • 포인터 특징
    • Accessing Heap
    • Accessing Resource (include extra program of extra device)
    • parameter passing
int main()
{
  int a = 10; // data variable
  int * p; // address variable, raw pointer
  p = &a;
  std::cout<< * p; // 10;
}

  • Array using pointer
    int main()
    {
    int * a = new int[5]; // dynamic array
    }
    

Reference

int main()
{
  int a = 10;
  int &r = a;
}

  • 레퍼런스 r은 stack에 카피되지 않고 a의 벨류를 받아쓴다. 즉 a = r이 된다.
    • Move 개념이다. 단 a=r는 똑같은 address 주소로 같은 밸류를 갖고 있다.
  • 포인터는 오직 data type에 따른 메모리만 할당 된다. (bytes)
    int main()
    {
    int a = 10;
    int &r = a;
    cout<<a; //10;
    r++;
    cout<<r; //11;
    cout<<a; //11;
    }
    

pointer to structure

struct Rectangle
{
  int length; // 4bytes
  int height; // 4 bytes
}; // 8bytes
int main()
{
  struct Rectangle r={10,5};
  struct Rectangle* p = &r;

  r = length.15;
  p->length = 20;
  cout>>r.length<<endl; //20;
}
  • when we create a pointer which is pointing to memory allocation of structure or class, we use “->” to pointing a data variable inside structure or class when we using a pointer.
  • 포인팅하는 어드레스에다가 포인터에게 값을 넣어주면 그 address에있는 밸류값이 포인터에게 주어진 값으로 바뀐다.

  • Modern C++(C++11부터)는 Smart pointer를 쓰인다, 왜냐하면 메모리 릭등 항상 dereferecing을 하기 귀찮고, 잘못되면 프로그램에 문제가 생기기 떄문이다.
    • #include
      • std::unique_ptr<>
        • 보통 Raw pointer로 많이 쓰인다.
      • std::share_ptr<>
        • 여러 포인터가 address를 공유할 수 있도록 한다.

Functions

  • Parameter passing
    • pass by value
    • pass by Address
    • pass by reference.

Case 1(monolithic program)

  int main()
  {
    ---------------------
    ---------------------
    ---------------------
    ---------------------
    ---------------------
    ---------------------
    ---------------------
    ---------------------
    ---------------------
    ---------------------
    ---------------------
  }

Case 2 ( Modular Program, Procedeure program)

void func1()
{
  ---------------------
}
int func2()
{
  ---------------------
}
float func3()
{
  ---------------------
}
void func4()
{
  ---------------------
}
int main()
{
  fun1();
  fun2();
  fun3();
  fun4();
}
int add(int a, int b)
{
  int c;
  c= a+b;
  return(c);
}
int main()
{
  int x,y,z;
  x= 10;
  y= 5;
  z = add(x,y);
  cout<<z;
}
  • int add는 proto type(즉 리턴값을 어떤 데이터 유형을 쓸것인지)
  • int a, int b는 Funtion parameter
  • add(x,y)는 Actual Parameter

int add(int* a, int* b)
{
  int c;
  c= a+b;
  return(c);
}
int main()
{
  int x,y,z;
  x= 10;
  y= 5;
  z = add(&x,&y);
  cout<<z;
}

Comments