1. Essential concept(Array, Complex Number, Reference, Pointer)
31 May 2020 | Algorithm
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;
}
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를 공유할 수 있도록 한다.
- std::unique_ptr<>
- #include
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