%d 는 주소값을 출력해도 10진수로 출력을 해서 값이 달라보이지 실제로는 같은 값입니다.
temp는 배열인데, 배열의 경우는 이름이 주소의 역할을 합니다. 그 이름에 &를 붙여도 주소값이라서 결국 temp == &temp 로 값은 (주소)값입니다.
seico75// 답변 정말 감사드립니다!!!!! ㅠㅠ 너무너무 감사드려요!!
그런데.. 제가 아직 의문인 게, %d로 주소값을 출력해도 8자리로 나오고 %p로 출력해도 8자리로 나오던데..
10진수 8자리로 표현할 수 있는 숫자(주소값)의 범위와 16진수 8자리로 표현할 수 있는 범위가 다른데, 둘다 똑같이 8자리로 나오면 .. 이건 둘다 주소값일 수가 있는가요?
그리고 temp는 배열이고 배열의 경우 이름이 주소값 역할을 하는 걸 이해했습니다. 그런데 주소값에 &를 붙이면 이중포인터처럼 주소값의 주소값이 되지는 않는 거지요??
10진수 8자리로 표현할 수 있는 숫자(주소값)의 범위와 16진수 8자리로 표현할 수 있는 범위가 다른데, 둘다 똑같이 8자리로 나오면 .. 이건 둘다 주소값일 수가 있는가요?
이거는 나오는 값을 알려주시면 더 정확히 알려드릴 수 있을 것 같습니다. 환경마다 실행시마다 주소값이 바뀔 수 있기 때문에 우연히 자리수가 같을 수도 있을 것 같고..
출력되는 값을 알려주시면 더 말씀드릴 수 있을 것 같습니다.
그런데 주소값에 &를 붙이면 이중포인터처럼 주소값의 주소값이 되지는 않는 거지요??
"temp 는 배열이름이고 배열의 이름은 배열의 첫원소를 가리킨다" 이며, &temp 의 경우는 배열 전체에 대한 주소라고 합니다. 결국은 같은 값이지만
배열의 타입이 다르다네요. 첫번째는 char 의 포인터이고, 두번째는 char[10] 의 포인터. (이건 저도 이번에 알았네요.)
아래의 소스를 실행해보면 하나는 0x01 이 증가하고 하나는 0x10 이 증가하는 것을 볼 수 있습니다.
#include <cstdio> int main() { char temp[16] = { 10 }; printf("%p\n", &temp + 1); printf("%p\n", temp + 1); return 0; }
댓글을 작성하려면 로그인해야 합니다.
cmkmcm 3년 전
직접 출력을 해보면 다 출력이 가능하긴 한데
%x로 하면 0 대신 빈 공간으로 나오고
%d로 하면 다른 값이 나옵니다
그런데 인터넷에서 설명글들을 찾아보다 보면 %d 로 하든 %p로 하든 둘다 주소값을 출력 가능하다는 거 같은데,
%d의 값은 너무 다르다 보니 맞는 설명인지 모르겠습니다
그리고
printf("%p\n", &temp); 와
printf("%p\n", temp); 둘다 같은 값이 나오는데 무슨 차이인지도 모르겠습니다 ㅠㅠ