|
김대의 님이 쓰신 글 :
: 유승철 님이 쓰신 글 :
: : 쓰레기값이라는것은 쓰레기라느곳이 있어야합니다. 님께서 작성하신곳에는 그쓰레기라는것이 없네요.. inp의 주소를 in에 받았는데 inp의 크기는 4바이트죠.. 거기서 + i를 증가를 하면 예로 i가 3이면 3*4 12바이트뒤의 주소에 있는것을 출력하겠지요 근데 inp는 오로지 4바이트뿐이니 안되는것이지요.. 위에분말씀대로 inp가 배열이거나 그배열의 주소를 가지고있는것이어야할것같네요
: :
: : 틀린부분도 있을수있지만.. 어찌되었던 그것은 에러가 당연히? 나는겁니다.
: --------------------답변..-------------------------
: 헐..님 먼가 잘못알고 계시는군요..
: 포인터는 주소만 할당을 하는것입니다.
: inp를 가지고 가는것이 아니라...
: 그러니까inp가 물론 int형 즉 4byte라면 그리고, inp주소가 1000이라면
: 님이 말한 i=3일때 포인터 in에는 inp의 주소가 할당이 됩니다. 여기서 님이 잘못생각하시는건.
: 포인터가 inp의 주소를 가져 가는것이지 그 자체를 가지는것이 아니라는것입니다.inp의 주소를 갖는것입니다. 그렇기 때문에 in+i는 i=3이므로 in+i의 주소는 1012가 되고 *(in+i)라고 적는다면...
: in+i의 주소 1012에 값을 나타내는 것입니다. 그러므로, inp는 주소만 in에게 주는것 뿐입니다.
: 이것이 제가 배운 포인터입니다.
: 제가 포인터를 잘못알고 있다면 좀 잘좀 설명좀해주세요.
:
: 만약에 배운게 잘못된거면 돈물어내라고 따져야져..ㅜㅜ
에... 님꼐서 설명하신게 맞지요
올리신소스를 보면서 설명?해볼꼐요
#include <stdio.h>
#include <conio.h>
void main(void)
{
int inp, i = 0;
int *in = &inp;
// 여기서 in은 inp의 주소를 얻어옵니다.
// in 을 출력하면 inp의 주소를 보여주겠지요
// *in을 하면 inp가 가지고있는 값을 보여주지요
//뭐 다아시는내용이겠죠
clrscr();
for(i=0;i<5;++i){
scanf("%d",(in+i) );
//값을 받습니다. 문제는 역기서 값을 집어넣는것인데요
// (in + i) 에 값을 집어넣겠지요
// 그런데 문제는 그주소? 에 해당하는곳을 위에서 컴파일러에게 알려주지않았습니다.
// 위에 선언은 오로지 inp만을 알려주었죠 아시겠지만 배열로 하게되면 연속적으로
// 공간을 할당(?) 해주죠. 그런데 그렇게 하지않았으니 이곳(주소)가 무엇을 하는지 알수없습니다.
// 컴파일러에서 사용중인지 또 운영체제에서 사용중인지 또는 알수없는곳에서 사용할지
printf("\n : %d", *(in+i)); }
getch();
// 에러는 대부분 종료할떄 날것입니다.
// 모든 공간은 프로그램이 종료되면 돌려주게 되있겠죠
// 그런데 종료시 없애는과정에서 이곳(in + i 의주소) 이 사용중일수도 있는것이죠
// 또는 후에 사용할수도 있죠
// 위에서 공간을 할당?하지않았으니까 그곳이 안전한곳인지 보장할수없죠
// 그래서 디버그때와 릴리즈 일떄 에러가 다르게 날것이며
// in + i 에서 i에 따라서(그주소에따라서) 안날수도있습니다.
// 또 사용컴퓨터에따라 안날수도있죠... 그러니 안전하게 하셔야되겠죠
}
뭐 대충설명했는데요 잘전달되었는지는 모르겠네요.. 용어를 잘몰라서요.. 대충 느낌대로 용어를 선택했습니다.-_-
어찌되었든 님께서 배우신것은 잘못된게 없습니다. 그러나 사용에는 문제가 있습니다.
언어에서 변수선언의 이유중에 공간할당이라는 이유가 있을것입니다. 변수선언없이
분명 실시간으로 필요한곳에 변수를 사용할수도 있겠죠 뭐 몇몇언어나 스크립트는 이런식이겠죠
그러나 이렇게 하면 속도가 느려질듯합니다. 뭐 설명은 이상하지만.....
근데 김대의님은 위에서 부터보니깐 다른사람이 지적해준문제를 잘안받아들이시는거 같에요.
물론 대의님께서 배우신대로 말씀하시고 아시는대로 말씀하셨지만... 왠지 알려주는사람이 잘못됬다고 그러시니깐.. 기분이 좀...그렇네요 ^^
뭐 제가 틀렸을가능성이 높지만 대의님께서 하시는방법으로 안하시는것이 분명 좋습니다.
|