2012-04-22 2 views
2

C에서 연습 문제를 작성하고 유효하다고 생각되는 코드를 작성했지만, 아직 초보자이기 때문에 확실하지 않습니다. 그것을 확인하고 그들이 동일하거나 아닌지 말해봐.두 가지 버전의 함수를 확인하는 C++

솔루션 코드 :

Point *PointArray::get(const int pos) { 
    return pos >= 0 && pos < size ? points + pos : NULL; 
} 

내 코드는 다음과 같습니다

내 코드에서 내가 널 포인터 여부를 반환 할 수 있는지 확인하는 조건을 확인해야한다는 인식
Point* PointArray::get (const int position) { 
    return &(data[position]); 
} 

, 하지만 그 외에도, 내 버전은 points + pos

points & data는 배열과 동일 포인트 클래스의, 나는 지뢰 데이터라는 이름의 솔루션 포인트.

편집 :

내 코드 내가 그것에 조건을 추가 한 후 : 간단히 말해서

Point* PointArray::get (const int position) { 
    return ((position >= 0 && position < size) ? &(data[position]) : NULL); 
} 
+2

pos> = 0인지 확인하는 것 외에는 동일합니다. –

답변

5

을, 그들은 같은 일을. 하지만 약간의 차이점이 있습니다.

1) 솔루션 코드가 배열 범위를 검사합니다. 당신의 솔루션은 그렇지 않습니다.

2) 솔루션은 포인터 산술을 사용하고 추가 역 참조/주소 연산을 피합니다 (대부분의 컴파일러가이를 최적화 할 것입니다). Efficiency: arrays vs pointers을 참조하십시오.

+0

예, 나는이 코드를 편집하여 작업 내용을 포함 시켰습니다. 감사합니다. –

+0

2) 동일합니다. –

+0

2의 차이점에 대한 논의는 현대 컴파일러가이를 최적화하는 것처럼 보입니다. http://stackoverflow.com/questions/2305770/efficiency-arrays-vs-pointers –

관련 문제