2013-07-10 4 views
0

이것이 바보 같은 질문 일 수 있음을 알고 있습니다.원시 데이터 유형의 포인터 objective-

나는 이것에 대해 완전히 혼란 스럽다. 나는 기본을 제대로 이해하지 못했다. 컴파일 오류가 발생하지 않았다

BOOL *booleanTest = (5 < 1)? YES : NO; 

를 한 이유는, 그것은 원시 데이터 타입이며, 그것은 내부에 관계없이 조건, 컴파일하고 예 항상 돌아 만들 었는지 포인터를 가질 수 없습니다.

는 이유로 저를 축복 해주십시오 또한

int *magicNumber = value/25; 

은 컴파일 오류가 발생하지 않은 이유.

답변

2

C는 분명히 믿는 것처럼 엄격하게 입력되지 않습니다. 정수를 포인터에 할당하는 것은 일반적으로 현명하지는 않지만 합법적입니다. 컴파일러는 할당이 캐스팅없이 정수에서 포인터를 만드는 것을 경고해야합니다.

-1

두 경우 모두 변수를 선언하고 어떤 종류의 초기화도없이 변수 자체를 사용합니다.

선언과 초기화의 차이점을 모르므로 선언하는 동안 변수 값이 가비지 또는 임의의 값으로 설정됩니다. 포인터가 가리키고있는 메모리 셀은 거기에 값을 남긴 다른 응용 프로그램에서 사용 된 임의의 메모리 셀이기 때문에 할당 방법이 있습니다. 첫 번째 경우에서 일어나는 이제 어떻게 :

BOOL *booleanTest = (5 < 1)? YES : NO; 

포인터 booleanTest이 BOOL을 입력으로 설정하고 가리키고있는 값이 전체 메모리 셀을 가리 키도록 필요한 경우에만 절반 숫자입니다. 그래서 그것은 셀의 처음 몇 비트를 차지하고 아마 1 일 것입니다. 그래서 항상 예스가 올 것입니다. 법적으로 뾰족한 값 내부 값을 저장시킨다으로서 제 2 케이스

int *magicNumber = value/25; 

이것으로

는 컴파일 오류가 발생하지 않을 것이다. 포인터의 정확한 변수 유형으로 형 변환됩니다.