C언어 포인터의 주소 지정 방식에 관해서?
C언어의 포인터 사용 시 주소 지정 방식이 알고싶습니다.
이중 포인터를 이용한 컴파일 중에 실행 시 마다 주소값이 달라지는데
Random으로 주소를 지정하는 방식인지 궁금합니다.
그리고 이중 포인터의 활용 예시를 알고싶습니다(실무적으로?...)
-> 이부분은 구체적으로가 아니라 막연하게만 설명해주셔도 도움이 될것같습니다~
55글자 더 채워주세요.
2개의 답변이 있어요!
"이중 포인터를 이용한 컴파일 중에 실행 시 마다 주소값이 달라지는데"
>> 포인터의 주소값은 환경마다 다 다릅니다.
RANDOM 함수 조차도 세팅에따라서 환경마다 값이 다르게 나오는것과 마찬가지입니다.
(100% 동일한 환경에서 동시에 실행하는 경우
동일 랜덤값은 일치하지만 실제로 그러한 환경을 구축하는건 힘들고 무의미합니다.)
이중포인터는 포인터를 쓰는것과 별 차이가없습니다.
해당하는 참조객체를 또 다른곳에서 참조객체로 써야하고 그 값이 서로 동기화가 되어야할때 사용하시면됩니다.
C 표준은 변수의 주소가 정확히 어떻게 되어야 하는지에 대해 정하지 않았습니다.
환경에 따라서 같을 수도 있고, 다를 수도 있고, 원하는 대로 설정할 수도 있습니다.
Address space layout randomization이라는 것도 있습니다. (환경에 따라 랜덤이기도 합니다.)이중포인터의 활용 예시라면...
// 파일명이 숫자로 시작해야 파일을 여는 함수 int my_fopen(const char *name, const char *mode, FILE **fp) { if(name[0] < '0' || name[0] > '9') return 1; FILE *ret = fopen(name, mode); if(!ret) return -1; *fp = ret; return 0; }이런 함수가 있다고 치면 (포인터 변수에 값을 넣기 위해서 그 포인터 변수의 주소가 필요합니다.)
FILE *fp; if(my_fopen("test.txt", "r", &fp)) return fputs("파일을 열지 못했습니다.", stderr), -1;이런 식으로 쓸 수 있겠죠. 여기서 fp가 포인터이기 때문에 &fp는 이중포인터가 됩니다.