2015-01-09 1 views
0

나는 포인터로 작업하려고 시도했는데이 문제가 발생했습니다. 이 코드에서 p, h는 두 포인터입니다 ... i = equality * p = & i, h = & j; 그리고 값을 인쇄 내 기대는 * p는 주소를 포함하고 p는 i를 가리키는 주소를 가지며 h의 경우 h는 주소를 가질 것이고 * h는 o/p의 j 값이 될 것이다.이 포인터 문은 어떻게 다른가요? p = & i, h = & j?

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
int i =10; 
int *p = &i; 
int j =30; 
int *h; 
h = &j; 
printf("Hello world!\n %d , %d \n" , *p , p); 
printf("Hello world!\n %d , %d \n" , *h , h); 
return 20; 
} 

그러나 페이지의 경우 내 O/P와 나는 반전 .. 왜 그것이 그렇게 .. 어떻게 컴파일러 차별화의 B/... 문이 두 종류의 w * P = &을한다 i; * p = i;

오/P 내가 질문 제목이 잘못 있다면 죄송이

Hello World! 
10 , 2359060 
Hello World! 
30, 2359056 

같다 .. 나는 상황 .. 비슷한 문제에 대한 링크를 설명하는 방법을 알고하지 않은 것

+0

'p'는'int'가 아닙니다 ->'printf ("% d \ n", p);는 좋은 코드가 아닙니다. 'printf ("% p \ n", p);'를 사용하는 것이 더 좋습니다. 'printf ("% d \ n", (void *) p);' – chux

+0

가장 좋은 하드웨어에는 차이점이 없습니다. 실제로 'void *'에 포인터를 던져 넣기 전에'varargs '에 넣는 것은 아무 것도하지 않습니다. 당신은''% p "'가 더 읽기 쉬운 방법으로 그것을 인쇄한다고 주장 할 수 있습니다,하지만 교과서 경고는 현실 세계에서는 거의 의미가 없습니다. – Blindy

답변

2

int *p = &i; 

int로 포인터로 p를 선언 같은 하지이고, 나는의 주소를 초기화합니다. 그것은 pi의 주소를 포함, 이러한 진술 후

int *p; 
p = &i; 

를 작성처럼, 그리고 *pi의 값. John Kugelman은 포인터 형식으로 %p 형식 지정자를 사용하여 포인터를 인쇄합니다.

0

포인터를 정의하는 적절한 방법이기 때문에 나는 두 번째 정의를 매우 받아들입니다. 헤더를 정의하고, 을 입력하고을 지정하면 *없이 포인터가 가리키는 변수에 할당됩니다.

1

이 문

int *p = &i; 

수단이 :

int *p; 
p = &i; 

p는 정수 포인터 (int *)으로 정의는 다음의 값 &i (i 변수 정수의 어드레스)가 할당된다.

*p = &i

-1

i 경우 10를 들고 변수이며, 당신이 다음 문장의 의미, i의 주소를 들고 int *p을 정의

printf("Hello world!\n %d , %d \n" , 
    *p , // value inside p, ie value of i, 10 
    p);  // value OF p, which is the address of i 
0

덜 혼동하려면 사용할 수 있습니다

int* p = &i; 

그러면 p는 주소를 가리키며 * p는 값을 나타냅니다.