대학수업/시스템프로그래밍기초

[07] 시스템 프로그래밍 기초(배열과 포인터)

MIRIP 2022. 11. 1. 17:42
반응형

배열(Array)

p.246

int grade[100];

이라는 배열이 있다고 하자. 이때 주소값은 0x100이라고 하면 grade[1]의 주소갑은 0x104이다. int가 4byte이기 때문이다.

char grade[] = "HANYANG";

이라는 배열은 문자열의 각각의 문자를 각 문자 배열 안에 넣는 것이다. 따라서 grade[0]에는 'H'가, grade[1]에는 'A'가 들어있다. 주소값을 참조할 때는 &를 쓴다. grade의 주소값을 0x100이라 한다면 &grade[0]는 0x100이다.

# Array space

32bit로는 4GB밖에 쓰지 못하기 때문에 64bit 운영체제가 나왔다.

Pointer

p.248

char *p = grade;
p++;

배열은 상수(constant)이지만 포인터는 변수(variable)이다.
따라서 포인터 p에 ++연산자를 쓸 수 있다.

일반적으로 포인터 타입과 데이터 타입은 다르다.

p = 100;

이러면 유효하지 않은 스테이트먼트이다.

p = (int *)100;

이런 식으로 타입 캐스팅을 해주어야 한다.

int *p = (int *)malloc(sizeof(int)*10);

다음과 같은 방식으로 int의 사이즈 x 10만큼의 메모리를 할당받을 수 있다.
이것은 힙 영역에 할당된다.

*p++는 ++가 우선순위가 높아서 p[1]과 같다.

return을 두개 이상 하고 싶으면 call-by-reference를 사용한다.
pointer을 쓰면 함수 호출을 할 때 parameter 복사를 안하기 때문에 효율적이다.
parameter에 자료들을 한번에 묶어서 보내주는 것에 배열을 사용한다.
만약 타입이 다르다면 struct를 사용한다.

728x90
반응형