잠시만요... 무슨말인지 이해를 못했어요...
진짜 초보여서 그런데 다시 설명해 주시면...
익명(211.248)2021-09-23 00:39
답글
뜻으로 보면 INT* pa 가 이해는 잘되긴함 int* 에 대한 변수 pa라서 근데 그렇게 쓰다보면 59.14 댓처럼 연달아 선언할때도 중복 적용될거처럼 착각해서 이젠 걍 *pa 로씀 IDE 자동완성에서도 그렇게 나오는경우가 거의 대부분임
ㄴㅁㄹ(59.5)2021-09-23 00:45
int* pa = &a
익명(114.203)2021-09-23 00:34
해당 댓글은 삭제되었습니다.
해당 댓글은 삭제되었습니다.2026-07-25 16:40
답글
참조 연산자는 포인터 이름 앞에 붙이는거 아니였나요?
타입의 뒤에 붙이는 거에요???
이해가 잘 안돼요...
익명(211.248)2021-09-23 00:44
답글
참조 연산자의 사용법을 모르겠어요... 제가 보는 자료에서는 포인터 이름 앞에 붙여서 사용하는 걸로 일고있는데
타입* 처럼 사용하는건 처음봐서...
익명(211.248)2021-09-23 00:51
int는 4바이트의 저장공간을 가리킴. int*은 그 저장공간을 가리키는 주소를 가리킴
익명(59.14)2021-09-23 00:44
pa의 타입자체가 int * 인거임 int에 대한 포인터. 그리고 pa가 가리키는게 int인거고
ㄴㅁㄹ(59.5)2021-09-23 00:46
변수가 두가지를 나타낼 수 있다고 생각하셈.1번은 실제 값2번은 그 실제값을 메모리상에 저장해놓는 주소값 (가상메모리 주소값)1번은 int a = 52번은 int* a = 0x100000 (주소값)우리가 보통 사용할 땐 1번값만 사용하는데특수한 상황에서 2번을 사용할 때 유용한 경우가 있음.어떤 변수의 주소값을 얻고 싶다면, & 라는 연산자를 사용하고. (&a)그 변수가 주소값을 저장하는 타입임을 명시하고 싶으면 [타입]*을 붙여주면 됨.(int* pa)혹은 주소값이 있는 상황에서 그 주소값에 들어있는 실제 값을 얻고싶다면 * 연산자를 활용하면됨. (*pa)
익명(114.203)2021-09-23 00:47
답글
int a = 5 라는 값은 컴퓨터 내부에 저장되기를 0x10000의 메모리 주소에 5로 저장하라~ 라고 저장되어있는데, 프로그래밍 내부에서 쓰는건 a값은 자동으로 0x10000안의 값으로 변환되어 나오지. 근데 굳이 0x10000이라는 값을 가지고 컨트롤 하고 싶다면 &a를 통해서 주소를 추출해줄 수 있다.
익명(114.203)2021-09-23 00:49
답글
그러니까 (타입*) 이라는 것 자채가 주소값을 저장하는 타입이다 라는걸 나타낸다는거죠????
pa는 그 주소값을 저장 할 새로운 공간의 이름을 뜻하는 거고
제가 이해하고 있는것이 맞나요???
익명(211.248)2021-09-23 01:04
답글
네 저 두가지 타입 중 실제값이 아닌 메모리 주소를 담는 타입인거죠. 메모리 주소는 특별하게 관리되기에 따로 문법을 만들어서 (int + * ) 관리해줍니다.
익명(114.203)2021-09-23 01:11
답글
포인터를 이해 못하시는 분들 중에, 결국 사용되는 모든 변수는 메모리 한켠에 [메모리 주소 : 메모리 주소 안에 저장되는 값] 이라는 일종의 쌍이라는것을 이해하지 못한 상태에서 보면 이걸 왜 쓰는지, 혹은 이걸 어떻게 이용해야하는지 안보이는 경우가 있어서 저렇게 설명해봤어요. C같은 경우는 어떤 변수를 설정하면 메모리 주소, 메모리 주소 안에 저장되는 값을 관리할 수 있는 타입을 제공하거나, 그렇지 않더라도 변수의 주소값을 추출하거나 (&) , 주소값에서 값을 추출하는 (*) 연산자를 제공해요.
익명(114.203)2021-09-23 01:14
답글
참고로 c를 제외한 대부분 다른 언어들은 [메모리 주소 : 메모리 주소 안에 저장되는 값] 에서 '메모리 주소'에 접근할 수 없게 막아버린답니다~! 따라서 *, & 연산자 같은 개념이 없죠. 개발자는 '값'만 볼 수 있거나, 주소값을 반환하려고 하면 변환된 특정 id값을 조회만 해볼 수 있습니다.
익명(114.203)2021-09-23 01:17
답글
그러면 사실상 int* pa의 의미는 "int형으로 된 변수의 주소값을 넣을 공간을 pa라는 이름의 공간에 집어넣겠다" 라는 뜻인거고, 포인터 선언에 쓰이는 *는 참조연산자인 *와는 또 다른 의미인 거네요? 그럼 여기서 궁금한 것이 pa의 공간은 왜 항상 4byte로 고정되어 있는 건가요?
익명(211.248)2021-09-23 01:18
답글
잘 이해하고 계신것 같네요. int*의 의미는, "내가 int(4byte)로 된 값을 가진 변수의 주소타입을 담을 또 다른 변수를 저장해보고 싶어" 라는 의미입니다. // int a = 5하는 순간, [0x1000] : 5 이런식으로 메모리 상에 저장될거에요. int 이기 때문에 메모리의 4byte(대충 4칸 먹는다 칩시다)를 먹겠죠. int*는 그럼 0x1000같은 것들만 먹을 수 있습니다. operator *는 주소값타입에서 한번 접근하여서 그 안에 있는 값을 까보는겁니다. 만약 (0) int a = 5 (1) int* pa = &a; (2) *pa 를 하면 (2)의 결과로는 뭐가 나올까요? 이 문제를 풀 수 있으시다면 거의 다 이해하신것같네요.
익명(114.203)2021-09-23 01:24
답글
참고로 위 문제에 대해서 context를 조금 제공해주자면 int a = 5를 한순간 [0x1000] : 5가 될것이고, int* pa = &a를 한 순간, 또다른 메모리 영역에 [0x7000] : 0x1000 이렇게 저장될거에요~
익명(114.203)2021-09-23 01:25
답글
그럼 저 궁금한 것이 포인터를 복수 저장할 때에는
int* pa, pb, pc 이런 식이 아니라
int *pa, *pb, *pc 이런 식으로 저장을 해야 하는데
이렇게 저장해야 하는 이유는 무엇인가요?
익명(211.248)2021-09-23 01:29
답글
이건 사실 기술적인것보다 언어적인 측면에 가까운것같은데요..c랑 c++는 타입 뒤에 붙는 *는 선언자(a)에 붙고, type 결정자(int)에 붙지 않는다고 하네요. 제가 설명해드린 개념과 어떻게보면 언어활용에서의 상충되는 부분은 있을것 같습니다.
익명(114.203)2021-09-23 01:36
답글
근데 여러개의 포인터를 선언할 땐, 후자가 더 직관적이지 않나요?
익명(114.203)2021-09-23 01:36
답글
ㅇㅎ 그런 개념인 것이군요. 그럼 int*, char*, double*
모두 4byte의 공간에 저장이 되는데 포인터 타입은 변수의 타입에 주소를 저장하는 것이기 때문에 아스키코드 값으로 표현되는 주소값을 넣기만 하면 되는 것임으로 4byte로 항상 일정한 것이군요??
익명(211.248)2021-09-23 01:42
int* pa 하면 pa는 변수의 메모리 주소를 저장하는데 변수의 메모리 주소는 4바이트로 항상 같아요
해당 댓글은 삭제되었습니다.
ㄹㅇ.. int*가 더 직관적이지않나
나도 첨에 후자가 직관적이라 그렇게 썻는데 연달아 선언할땐 전자처럼 해야함
잠시만요... 무슨말인지 이해를 못했어요... 진짜 초보여서 그런데 다시 설명해 주시면...
뜻으로 보면 INT* pa 가 이해는 잘되긴함 int* 에 대한 변수 pa라서 근데 그렇게 쓰다보면 59.14 댓처럼 연달아 선언할때도 중복 적용될거처럼 착각해서 이젠 걍 *pa 로씀 IDE 자동완성에서도 그렇게 나오는경우가 거의 대부분임
int* pa = &a
해당 댓글은 삭제되었습니다.
참조 연산자는 포인터 이름 앞에 붙이는거 아니였나요? 타입의 뒤에 붙이는 거에요??? 이해가 잘 안돼요...
참조 연산자의 사용법을 모르겠어요... 제가 보는 자료에서는 포인터 이름 앞에 붙여서 사용하는 걸로 일고있는데 타입* 처럼 사용하는건 처음봐서...
int는 4바이트의 저장공간을 가리킴. int*은 그 저장공간을 가리키는 주소를 가리킴
pa의 타입자체가 int * 인거임 int에 대한 포인터. 그리고 pa가 가리키는게 int인거고
변수가 두가지를 나타낼 수 있다고 생각하셈.1번은 실제 값2번은 그 실제값을 메모리상에 저장해놓는 주소값 (가상메모리 주소값)1번은 int a = 52번은 int* a = 0x100000 (주소값)우리가 보통 사용할 땐 1번값만 사용하는데특수한 상황에서 2번을 사용할 때 유용한 경우가 있음.어떤 변수의 주소값을 얻고 싶다면, & 라는 연산자를 사용하고. (&a)그 변수가 주소값을 저장하는 타입임을 명시하고 싶으면 [타입]*을 붙여주면 됨.(int* pa)혹은 주소값이 있는 상황에서 그 주소값에 들어있는 실제 값을 얻고싶다면 * 연산자를 활용하면됨. (*pa)
int a = 5 라는 값은 컴퓨터 내부에 저장되기를 0x10000의 메모리 주소에 5로 저장하라~ 라고 저장되어있는데, 프로그래밍 내부에서 쓰는건 a값은 자동으로 0x10000안의 값으로 변환되어 나오지. 근데 굳이 0x10000이라는 값을 가지고 컨트롤 하고 싶다면 &a를 통해서 주소를 추출해줄 수 있다.
그러니까 (타입*) 이라는 것 자채가 주소값을 저장하는 타입이다 라는걸 나타낸다는거죠???? pa는 그 주소값을 저장 할 새로운 공간의 이름을 뜻하는 거고 제가 이해하고 있는것이 맞나요???
네 저 두가지 타입 중 실제값이 아닌 메모리 주소를 담는 타입인거죠. 메모리 주소는 특별하게 관리되기에 따로 문법을 만들어서 (int + * ) 관리해줍니다.
포인터를 이해 못하시는 분들 중에, 결국 사용되는 모든 변수는 메모리 한켠에 [메모리 주소 : 메모리 주소 안에 저장되는 값] 이라는 일종의 쌍이라는것을 이해하지 못한 상태에서 보면 이걸 왜 쓰는지, 혹은 이걸 어떻게 이용해야하는지 안보이는 경우가 있어서 저렇게 설명해봤어요. C같은 경우는 어떤 변수를 설정하면 메모리 주소, 메모리 주소 안에 저장되는 값을 관리할 수 있는 타입을 제공하거나, 그렇지 않더라도 변수의 주소값을 추출하거나 (&) , 주소값에서 값을 추출하는 (*) 연산자를 제공해요.
참고로 c를 제외한 대부분 다른 언어들은 [메모리 주소 : 메모리 주소 안에 저장되는 값] 에서 '메모리 주소'에 접근할 수 없게 막아버린답니다~! 따라서 *, & 연산자 같은 개념이 없죠. 개발자는 '값'만 볼 수 있거나, 주소값을 반환하려고 하면 변환된 특정 id값을 조회만 해볼 수 있습니다.
그러면 사실상 int* pa의 의미는 "int형으로 된 변수의 주소값을 넣을 공간을 pa라는 이름의 공간에 집어넣겠다" 라는 뜻인거고, 포인터 선언에 쓰이는 *는 참조연산자인 *와는 또 다른 의미인 거네요? 그럼 여기서 궁금한 것이 pa의 공간은 왜 항상 4byte로 고정되어 있는 건가요?
잘 이해하고 계신것 같네요. int*의 의미는, "내가 int(4byte)로 된 값을 가진 변수의 주소타입을 담을 또 다른 변수를 저장해보고 싶어" 라는 의미입니다. // int a = 5하는 순간, [0x1000] : 5 이런식으로 메모리 상에 저장될거에요. int 이기 때문에 메모리의 4byte(대충 4칸 먹는다 칩시다)를 먹겠죠. int*는 그럼 0x1000같은 것들만 먹을 수 있습니다. operator *는 주소값타입에서 한번 접근하여서 그 안에 있는 값을 까보는겁니다. 만약 (0) int a = 5 (1) int* pa = &a; (2) *pa 를 하면 (2)의 결과로는 뭐가 나올까요? 이 문제를 풀 수 있으시다면 거의 다 이해하신것같네요.
참고로 위 문제에 대해서 context를 조금 제공해주자면 int a = 5를 한순간 [0x1000] : 5가 될것이고, int* pa = &a를 한 순간, 또다른 메모리 영역에 [0x7000] : 0x1000 이렇게 저장될거에요~
그럼 저 궁금한 것이 포인터를 복수 저장할 때에는 int* pa, pb, pc 이런 식이 아니라 int *pa, *pb, *pc 이런 식으로 저장을 해야 하는데 이렇게 저장해야 하는 이유는 무엇인가요?
이건 사실 기술적인것보다 언어적인 측면에 가까운것같은데요..c랑 c++는 타입 뒤에 붙는 *는 선언자(a)에 붙고, type 결정자(int)에 붙지 않는다고 하네요. 제가 설명해드린 개념과 어떻게보면 언어활용에서의 상충되는 부분은 있을것 같습니다.
근데 여러개의 포인터를 선언할 땐, 후자가 더 직관적이지 않나요?
ㅇㅎ 그런 개념인 것이군요. 그럼 int*, char*, double* 모두 4byte의 공간에 저장이 되는데 포인터 타입은 변수의 타입에 주소를 저장하는 것이기 때문에 아스키코드 값으로 표현되는 주소값을 넣기만 하면 되는 것임으로 4byte로 항상 일정한 것이군요??
int* pa 하면 pa는 변수의 메모리 주소를 저장하는데 변수의 메모리 주소는 4바이트로 항상 같아요
https://m.dcinside.com/board/programming/1066195