오전.
함수오버로딩-(p.360)
overloading 은 여러함수들이 동일한 이름을 사용할수 있는 기능이다.
인자의type은 같아도 인자만 다르거나 인자만 바꾸어 사용할수 있다는것.
오버로딩의 예제.
-static 전역변수나 static지역변수가 할당되는 공간이다.
-heap은 동적으로 메모리를 할당하는 공간.
-stack은 함수내 지역변수들이 저장되는 공간이다.
동적메모리 할당은 컴퓨터로 부터 메모리를 얻어 오는것을 이야기 한다.
프로그램이 실행되는 도중 메모리의크기에 따라 할당용량이 결정되고 할당하게되고
메모리를 해제하는 시점을 자유로이 조절할수도 있다.
예제)
-------------------------------------------------
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int* func(int num)
{
ar[100];
int*arrA = new int[num];
return (arrA);
}
int main(void)
{
int size;
cout<<"할당하고자 하는 배열의 크기" ;
cin>>size;
int *arr = new int[size];
for(int i = 0;i<size; i++)
{
arr[i] = i + 10;
}
for(int j = 0; j<size; j++)
{
cout<<"arr["<<j<<"] = "<<arr[j]<<"\n";
}
delete arr;
return 0;
}
-------------------------------------------------
*정적 메모리할당은 동적메모리할당과 다르게 변수를 정의할때 먼저크기를 정하여 프로그램을 실핼한다.
그래서 메모리가 모자라거나 아니면 메모리를 낭비할수도 있다. 함수의실행이 끝나면 자동적으로
메모리가 해제되고 변수도 소멸된다.
-동적 메모리를 할당하는 연산자
new[], delete[]를 사용하여 배열을 동적으로 할당할수 있다.
new[]를 사용해 메모리 공간을 할당 하게 되면 사용이 끝나는 시점에
메모리를 해제 해줘야 하는데 그연산자가 바로 delete[]다.
new[], delete[]와 비슷하게 new, delete 가 있는데 이연산자는
변수 하나를 동적으로 할당하는것이다.
동적메모리 할당을 실패할경우 null값을 가지게 되는데
그렇게 될경우를 대비해 예외 처리를 해줘야 한다.
new[]와 new는 전혀 다른 연산자이다. delete[]와 delete도 마찮가지다. new로 할당한 메모리를 delete[]로해제하려 하면 문제가 생긴다. 할당한 메모리를 일부분만 해제하는 일이 생기게되고 반대로 new[]로 할당한 메모리를 delete로 해제하려 하면 있지도 않은 배열을 해제하려하기 때문에 문자가 생기게 된다.
c의 malloc과 c++ new는 같은 역활을 한다.
오후
-문자배열
문자열은 const int * 이다.
malloc은 위에 설명했기에 pass.
auto (자동변수)
- 일반적인 변수 형태로 블럭 안에서만 유효하며 블럭의 실행이 끝나면 소멸
- 스택(Stack)에 메모리 할당
- auto 키워드는 생략할 수 있음. 즉 아무 표시가 없으면 자동변수가 됨
static (정적변수)
- 블럭 안에서만 유효한 값을 가지지만 자동변수와 같이 없어지지 않고 블럭으로 다시
돌아왔을 때 이전 값을 다시 이용 가능
- 초기화를 생략하면 0으로 자동 초기화
- 힙(Heap)에 메모리 할당
- 선언된 위치에 따라 다음과 같이 구분됨
. 내부정적변수 : 함수 내부에서 선언되며, 함수 내부에서만 사용이 가능. 하지만,
프로그램이 실행되는 동안 존재
. 외부정적변수 : 함수 외부에서 선언되며, 다른 소스파일에서는 참조할 수 없음
-strlen 함수-
-입력한 문자열의 길이 출력.
"test" 출력하면 문자열의 길이인 4가 출력이 된다.
strlen 이란 함수는 문자열의 길이를 return
해주는 함수이다. (stirng length)
계산을 할때 null문자 이전까지의 길이만 계산한다.
-문자열이 저장된 메모리의 주소값 출력
이건 별다른 설명이 필요 없을듯..
(참고 p.226)
위예제는 main, printf, abc, malloc,p 의 주소값을 추가 해서 출력 한것이다.
main 과 printf에 '&'를 붙여서 출력 하거나 '&'를 붙이지 않고 출력 해도 같은 주소같이 나온다.
이유는 main 과 printf에는 각각의 주소값이 있기때문에 '&'상관 없이 같은 값이 출력이 되는것이다.
-문자열에서 메모리에 저장되는 위치
위에서도 얘기했지만 다시한번..
-static 전역변수나 static지역변수가 할당되는 공간이다.
-heap은 동적으로 메모리를 할당하는
공간.
-stack은 함수내 지역변수들이 저장되는 공간이다.
*전역변수?
-함수의 외부에 선언되는 변수
-전역변수는 데이터 영역의
메모리 공간에 선언.
-프로그램 전체에서 변수 사용 가능.
-프로그램이 종료될 때까지 값이
사라지지 않음.
-초기값은 0으로 지정(VisuaStudio에서만)
**
Uninitialized Data : 초기화 안된 전역변수가 저장되는 곳이며 프로그램이 실행되기 전에 0으로 초기화 된다. BBS라 불린다.
Stack : 스택은 지역변수가 저장되는 메모리가 동작하는 방식이다.
[##_1N|cfile24.uf@153058144C10E74153F22F.jpg|width="409" height="224" alt="" filename="ÇԼöȣÃâ½ø
'School Study' 카테고리의 다른 글
[BSP]업무일지-20100614 - 임종현 (0) | 2010.06.14 |
---|---|
[BSP]업무일지-20100611-임종현 (0) | 2010.06.14 |
[BSP]업무일지 - 20100609 -임종현 (0) | 2010.06.09 |
[BSP]업무일지 -20100608 -임종현 (0) | 2010.06.08 |
[BSP]업무일지 - 20100607 - 임종현 (0) | 2010.06.07 |