기초 문법 리뷰
*메모리
컴퓨터의 메모리는 테이블을 보관하는 장소
바이트(8 bits) 단위로 주소가 지정됨
모든 변수는 주소를 가짐
*포인터
포인터(pointer)는 메모리 주소를 값으로 가지는 변수이다. 포인터 변수는 다음과 같이 선언된다.
type-name
* vairable-name;
vairable-name은 선언된 포인터 변수의 이름이며, * 는 variable-name이 포인터 변수임을 표시하고, type-name은 포인터 변수 variable-name에 저장될 주소에 저장될 데이터의 유형을 지정
연산자 &는 변수로부터 그 변수의 주소를 추출하는 연산자이다.
p = %c를 저장할 수 있는 이유는 p가 *p로 선언되어 포인터변수이기 때문이다.
x 라는 변수가 10248번지에 할당되고
y 라는 변수가 1024번지에 할당되었다
ip 라는 변수가 1008번지라는 주소에 할당되었다.
ip
= &x;
x의 주소를 포인터변수 ip에 저장을 해라
1028라는 주소가 ip포인터변수에 저장이 된다
*는 포인터변수라는 기호의 역할을 한다
일반문장에서 어떤 포인트변수앞에 *가 등장하면
포인터변수가 저장하고 있는 주소,
그 주소에 저장된 값이나 혹은 그 주소가 참조하는 자리를 의미
*에 해당하는 치환문이 오른쪽에 등장하느냐 왼쪽에 등장하느냐에 따라 구분된다.
y=*ip
*ip는 1이라는 값을 표현한다. 1을 변수 y에 저장하도록 해라
y=*ip=1 과 같은 의미를 두게 된다.
*ip=
0;
*가 치환문의 왼쪽에 등장하게 될 경우
ip는 포인터의 변수이다.
ip라는 포인터변수 자체가 아니라 ip주소가 현재 저장하고 있는 주소
그 주소에 0을 써라
현재 ip주소가 1028이고 이것은 즉 1028번지에 0을 써라
현재 1028번지의 주소는 x이다.
x=0 을 써라 와 같다
*포인터와 배열
포인터와 배열은 매우 긴밀히 연관되어 있다.
예를 들어 다음과 같이 선언된 배열 a가 있다고 하자.
int
a[10];
정수형 변수 a에 10칸짜리 배열을 만든다.
a라는 또다른 하나의 변수가 만들어진다.
배열의 이름은 또다른 하나의 변수의 이름이 a다
그럼 a라는 변수는 무엇이냐
a라는 변수는 포인터 변수여서 이 변수는 이 배열의 시작주소
시작주소라는 것은 이 10칸짜리 배열의 첫번째칸에 a[0]의 주소가
포인터변수 a에 저장이 된다.
*예제
*포인터 arithmetic
*a와 a[0]은 동일한 의미이다.
또한 a[1]은 *(a=1)과 동일하고, a[i]는 *(a+i)와 동일하다.
int
a[10];
*동적메모리 할당
변수를 선언하는 대신 프로그램의 요청으로 메모리를 할당 할 수 있다. 이것을 동적 메모리 할당(dynamic memery allocation)이라고 부른다.
malloc 함수를 호출하여 동적메모리할당을 요청하면 요구하는 크기의 메모리를 할당하고 그 시작 주소를 반환한다.
*배열키우기
동적으로 할당된 배열은 공간이 부족할 경우 더 큰 배열을 할당하여 사용할 수 있다.
int
* array = (int *)malloc(4*sizeof(int));
/*배열 array으 크기가 부족한 상황이 발생한다. */
int
* temp =(int *)malloc(8*sizeof(int));
int
i;
for(i=0;
i<4 i="" p="">
4>
tmp[i] = array[i];
array=temp;
malloc 함수를 쓸때는 sizeof를 이용하여 사용한다.
크기를 키울수 있는 경우에는 배열로 선언하면 안된다.
댓글 없음:
댓글 쓰기