cmkmcm   3년 전

직접 출력을 해보면 다 출력이 가능하긴 한데

%x로 하면 0 대신 빈 공간으로 나오고

%d로 하면 다른 값이 나옵니다

그런데 인터넷에서 설명글들을 찾아보다 보면 %d 로 하든 %p로 하든 둘다 주소값을 출력 가능하다는 거 같은데, 

%d의 값은 너무 다르다 보니 맞는 설명인지 모르겠습니다

그리고 

printf("%p\n", &temp); 와

printf("%p\n", temp); 둘다 같은 값이 나오는데 무슨 차이인지도 모르겠습니다 ㅠㅠ

seico75   3년 전

%d 는 주소값을 출력해도 10진수로 출력을 해서 값이 달라보이지 실제로는 같은 값입니다.

temp는 배열인데, 배열의 경우는 이름이 주소의 역할을 합니다.  그 이름에 &를 붙여도 주소값이라서 결국 temp == &temp 로 값은 (주소)값입니다.

cmkmcm   3년 전

seico75// 답변 정말 감사드립니다!!!!! ㅠㅠ 너무너무 감사드려요!!

그런데.. 제가 아직 의문인 게, %d로 주소값을 출력해도 8자리로 나오고 %p로 출력해도 8자리로 나오던데..

10진수 8자리로 표현할 수 있는 숫자(주소값)의 범위와 16진수 8자리로 표현할 수 있는 범위가 다른데, 둘다 똑같이 8자리로 나오면 .. 이건 둘다 주소값일 수가 있는가요?

그리고 temp는 배열이고 배열의 경우 이름이 주소값 역할을 하는 걸 이해했습니다. 그런데 주소값에 &를 붙이면 이중포인터처럼 주소값의 주소값이 되지는 않는 거지요??

seico75   3년 전

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;
}

댓글을 작성하려면 로그인해야 합니다.