상자에 이름붙여놓고 여기에 뭘 넣기도하고 빼기도하고 상자 통째로 어떤 작업을 수행하기도 하고 대충 이런거임?
댓글 14
어떤 변수가 있는데 갑자기 그 변수가 필요없어졌네? 근데 메모리는 계속 차지 중이야. 그럴 땐 해제해버리면 프로세스 메모리도 쓸데없이 차지하는 일이 없어지지 ㅇ 포인터의 역할 중 하나라 보면 됨. 동적 할당이라 부르고
ㅁㅈ(unknowngolem)2015-04-12 00:35
정적으로 할당하면 그 변수의 메모리는 프로그램이 끝날 때까지 함께하는 거임. 정적으로 배열을 무지막지하게 크게 선언해버리면 그 프로그램은 바로 뻑나지
ㅁㅈ(unknowngolem)2015-04-12 00:37
어떠한 구조체를 선언하고 구조체 포인터로 동적할당 해가면서 하는게 경제적임?
안드의노예(118.35)2015-04-12 00:40
그 점에 대해선 경우가 너무 많은데 일단 함수 안에 선언된 정적 변수의 메모리는 함수가 끝날 때 사라지게 되고
ㅁㅈ(unknowngolem)2015-04-12 00:43
다루려는 구조체 변수의 크기가 겁나게 크면 동적 할당으로 필요할 땐 할당하고 필요없어지면 해제하는게 경제적이겠지
ㅁㅈ(unknowngolem)2015-04-12 00:45
보통 어느 함수 내에서만 쓰고 말거면 포인터 선언은 잘 안 함
ㅁㅈ(unknowngolem)2015-04-12 00:46
ㅁㅈ/ㄱㅅㄱㅅ 포인터가 그런거였구나
익명(121.143)2015-04-12 00:47
일단 내가 말한건 포인터의 동적 할당 역할 뿐이라.. 포인터의 전부라 볼 순 없고 위에서 오해할만한게 동적 할당도 겁나게 큰 숫자로 해버리면 뻑나는 건 똑같으. 단지 정적과 다르게 유도리있게 크기를 조절해나갈 수 있다는게 장점임
ㅁㅈ(unknowngolem)2015-04-12 00:51
일단 포인터 자체는 그냥 어떤 메모리 공간을 가리키는 주소 값이야. 이 주소 값의 자료형은 포인터 형이라는 거고 그 메모리 공간이 어느 정도의 크기인지 값의 유형은 뭔지에 따라 포인터 형을 "자료형 *" 식으로 나타낸다. (예: int *, char *)
ㅅㅅㅅ(125.128)2015-04-12 00:56
포인터 변수는 포인터 값을 가질 수 있는 변수인데, 선언은 일반 변수 선언하듯이 한 뒤 변수 이름 부분에 *만 쓰면 그건 변수가 아니라 포인터 변수가 됨. (예: int i, j, k; => int (*i), (*j), (*k); 물론 이 경우 괄호는 생략할 수 있어.) 배열도 마찬가지야. (예: int (*arr)[100]; 이렇게 하면 배열 자체의 포인터가 됨. 이 경우에는 괄호는 생략 불가. 생략 시 int * 포인터 값의 배열이 되어 버린다)
ㅅㅅㅅ(125.128)2015-04-12 00:57
int (*i); 같이 선언할 경우 *i라는 이름은 int형 변수라는 걸 컴파일러에게 알려준 거고, 실제 선언되는 변수의 이름은 포인터 변수로써 i가 된다. 그래서 *i = 3; 식으로 *i라는 int형 변수에 접근하려고 할 경우 i에 들어있는 포인터 값을 보고 그걸 주소로 해서 *i 라는 변수 공간에 접근한다. 변수 주소에 대한 방정식 같은 거지.
ㅅㅅㅅ(125.128)2015-04-12 00:59
그리고 어떤 변수를 가리키는 포인터 값을 알아내고 싶으면 &변수명 을 쓴다. 그래서 int *i = &j; 식으로 쓴 다음 *i에 접근하면 실질적으로 변수 j에 접근한 거랑 똑같은 결과가 돼.
ㅅㅅㅅ(125.128)2015-04-12 01:00
ㅅㅅㅅ/ 좋은 설명 ㄱㅅㄱㅅ. 덕분에 이해가 된 것 같다.
익명(121.143)2015-04-12 01:07
포인터가 뭐냐면? 바로 몬스터 볼이다. 그리고 넌 지우다. 그리고 그 안에 든 몬스터는 객체다.
어떤 변수가 있는데 갑자기 그 변수가 필요없어졌네? 근데 메모리는 계속 차지 중이야. 그럴 땐 해제해버리면 프로세스 메모리도 쓸데없이 차지하는 일이 없어지지 ㅇ 포인터의 역할 중 하나라 보면 됨. 동적 할당이라 부르고
정적으로 할당하면 그 변수의 메모리는 프로그램이 끝날 때까지 함께하는 거임. 정적으로 배열을 무지막지하게 크게 선언해버리면 그 프로그램은 바로 뻑나지
어떠한 구조체를 선언하고 구조체 포인터로 동적할당 해가면서 하는게 경제적임?
그 점에 대해선 경우가 너무 많은데 일단 함수 안에 선언된 정적 변수의 메모리는 함수가 끝날 때 사라지게 되고
다루려는 구조체 변수의 크기가 겁나게 크면 동적 할당으로 필요할 땐 할당하고 필요없어지면 해제하는게 경제적이겠지
보통 어느 함수 내에서만 쓰고 말거면 포인터 선언은 잘 안 함
ㅁㅈ/ㄱㅅㄱㅅ 포인터가 그런거였구나
일단 내가 말한건 포인터의 동적 할당 역할 뿐이라.. 포인터의 전부라 볼 순 없고 위에서 오해할만한게 동적 할당도 겁나게 큰 숫자로 해버리면 뻑나는 건 똑같으. 단지 정적과 다르게 유도리있게 크기를 조절해나갈 수 있다는게 장점임
일단 포인터 자체는 그냥 어떤 메모리 공간을 가리키는 주소 값이야. 이 주소 값의 자료형은 포인터 형이라는 거고 그 메모리 공간이 어느 정도의 크기인지 값의 유형은 뭔지에 따라 포인터 형을 "자료형 *" 식으로 나타낸다. (예: int *, char *)
포인터 변수는 포인터 값을 가질 수 있는 변수인데, 선언은 일반 변수 선언하듯이 한 뒤 변수 이름 부분에 *만 쓰면 그건 변수가 아니라 포인터 변수가 됨. (예: int i, j, k; => int (*i), (*j), (*k); 물론 이 경우 괄호는 생략할 수 있어.) 배열도 마찬가지야. (예: int (*arr)[100]; 이렇게 하면 배열 자체의 포인터가 됨. 이 경우에는 괄호는 생략 불가. 생략 시 int * 포인터 값의 배열이 되어 버린다)
int (*i); 같이 선언할 경우 *i라는 이름은 int형 변수라는 걸 컴파일러에게 알려준 거고, 실제 선언되는 변수의 이름은 포인터 변수로써 i가 된다. 그래서 *i = 3; 식으로 *i라는 int형 변수에 접근하려고 할 경우 i에 들어있는 포인터 값을 보고 그걸 주소로 해서 *i 라는 변수 공간에 접근한다. 변수 주소에 대한 방정식 같은 거지.
그리고 어떤 변수를 가리키는 포인터 값을 알아내고 싶으면 &변수명 을 쓴다. 그래서 int *i = &j; 식으로 쓴 다음 *i에 접근하면 실질적으로 변수 j에 접근한 거랑 똑같은 결과가 돼.
ㅅㅅㅅ/ 좋은 설명 ㄱㅅㄱㅅ. 덕분에 이해가 된 것 같다.
포인터가 뭐냐면? 바로 몬스터 볼이다. 그리고 넌 지우다. 그리고 그 안에 든 몬스터는 객체다.