2012-04-30 2 views

답변

4

int *ppint에 대한 포인터로 pp을 정의하지만, 당신은 대신 int의 주소의 int에 대한 포인터의 주소를 초기화하는 것입니다. "int의 주소"와 "int에 대한 포인터의 주소"가 같은 타입이 아니기 때문에, 컴파일러는 적어도 캐스트를하지 않고도 수행 할 수 없습니다. 거의 확실하게 이 아닙니다. 그것을하고 싶다). CPU가 실제 문제없이 한 위치에서 다른 위치로 데이터를 이동 할 수 있도록

예, 포인터의 두 가지 유형이 아마 같은 크기 있습니다. 그러나 컴파일러는 타입 검사를 통해 발을 쏘지 못하도록하고 여기서 그 일을합니다. 위에서 언급 한 캐스팅을 통해 요구하는 것을 할 수있게 해줄 것입니다. 그러나 실제로하고있는 일은 거의 또는 전혀 이해가 안되기 때문에 캐스팅을 사용해야합니다.

2

static type checker 예. 보기의 구현 지점에서 아니오. 당신이 저장하는 동안 int로 포인터로 pp을 선언하고 있기 때문에

유형 검사가 무엇을 할당하고 주변에 통과하는 것은 당신이 그것을 선언하는 방법에 대해 올바른지 확인해야하기 때문에,

int *pp = &p; 

을 거부합니다 int에 대한 포인터를 가리키는 포인터. 무언가에 대한 포인터와 다른 포인터 사이에 차이가 없더라도 특정 유형으로 선언 한 경우 점검 된 유형에 차이가 있습니다.

1

대부분의 플랫폼에서 모든 포인터는 메모리에서 같은 위치에 있습니다. 메모리에있는 다른 위치의 주소입니다. 이 문제는 대부분 컴퓨터가 올바른 사용을 시행 할 수 있도록 형식을 지정하려고하는 문제입니다.

잘못된 유형으로 저장해야하는 경우 다른 포인터 유형간에 언제든지 유형 변환 할 수 있습니다.

+1

컴파일러를 무시하면 문제가 발생합니다. 코드를 컴파일하는 것뿐만 아니라 신중하게 주조하십시오. –

+1

포인터 *는 기본적으로 모두 동일 할 수 있습니다. 많은 구현에서 그렇지만 반드시 그런 것은 아닙니다. 다른 유형의 포인터가 다른 표현을 갖는 구현도 있습니다. –

1

정수에 대한 포인터를 만들면 컴파일러에서 정수 주소를 지정해야합니다. 대신 정수가 아닌 포인터의 주소를 지정합니다. 컴파일러가 int를 찾을 위치를 알기 위해서는 두 번째 별표를 추가하여 pp가 메모리 주소를 가리키고 컴파일러에게 차례로 int를 가리 키도록해야합니다.

관련 문제