int hello=3;
이라고 선언했을때
3을 가지고있는 hello 의 주소값을 0x00401000 으로 생각하고,
scanf("%d",&hello);
이렇게 쓰면 입력한 값이 0x00401000 인 hello 에 들어가는 이유가 & 붙여서 그런거잖아요?
근데 궁금한것이...
hello = 5;
를 하게되면
3 = 5; 과 같은 식이여서 상수에 상수를 집어넣는꼴 아닌가요..?
늘 당연하게 해왔던건데 문뜩 궁금해져서 질문남깁니다.
혹시 대입연산자는 자동으로 주소에 값을 넣어준다고 생각하면되나요?
Int 라는 것은 형식인데 이 위치에는 string, int , long , double 등 이 담깁니다. 쉽게 그 안에 담기는 것이 이제 그 특성을 가진 것들입니다. Int를 과일이라고 치면 과일이 3개 에서 5개가 된거
오히려 그 경우엔 반대의 질문이 나올것같은데욧.. 대입연산자는 해당 주소에 값을 집어넣는게 맞고, 그럼 &value는 value의 주소를 담은 공간이니 &value를 조작했을때 주소가 담긴 공간이 아닌 왜 원주소지의 값이 바뀌는지가 더 궁금하실것같은뎅
&value 가 value 의 주소를 담은 공간으로 보기보단.. 그냥 value의 주소를 반환하는 함수 로 봐야하는것아닌가요..? 저는 작성자인데요 ..ㅠ 이해가 가질않네요.
0x00401000을 값으로 가지고있는 녀석이 또있는거고 그걸 &value 는 또다른 주소가있는거고… 그 주소는 0x00401000을 값을로 가지고있는건가요?
C를 직접 막 지지고볶으면서 갖고논적은 없어서 헛소리를 해댔나보네요.. 미안해요!
int* value = 같이 선언하는게 공간이고 &는 함수느낌이 맞는것같아요! 제가 주력으로 C만 죽어라 팠다면 정확히 얘기할수있었겠지만... 아쉽게도 그건 아니라서 헛소리만 해대는점은 죄송합니다
아네요 답변해주셔서 감사합니다.. 어샘블리랑 다른언어를 해오다보니 원론적으로 조금 이해가 안가는 부분이많네요 …
어셈블리어를 아신다면 컴파일된 오브젝트 파일을 어셈블리어로 매핑해주는 프로그램을 이용하면 되지 않을까요? 그러면 왜 그렇게 되는지 보기 훨씬 편할텐데용..
보긴했는데 저혼자 판단하는거보단 딱 확실한 개념을 원해서..
제가 이해하는게 맞다면 대입연산자(=)를 사용할 경우 왼쪽 피연산자 변수의 주소에 오른쪽 피연산자 값을 할당해주는게 맞는걸로 알아요 변수가 주소가 아닌 그저 상수로 치환되는 녀석이었다면 변수란 것의 존재의미가 없을것같긴한데용.. 개인적인 생각이에요!
ㅇㅇ
int hello = 5를 치면 주소값이 0x00401000 hello 가 생성되고 hello라는 이름을 붙인 주소값 0x00401000에 5를 넣어서 보관하는거임 이후에 hello = 3을 치면 주소값 0x00401000에 보관되어있던 5를 버리고 3을 저장하는거임
국비충 말고는 c공부하는 인간이 없어서 이걸 대답 안해주노...