2013-08-15 2 views
-1

CS 학부 과정에서 나는 포인터가 중요한 데이터 유형 인 C로 시작했습니다. 그 후 Java, JavaScript, PHP, Python을 접했습니다. 그들 중 누구도 포인터를 가지고 있지 않습니다.다른 언어에 해당하는 C 포인터

그래서? 그들은 포인터와 같은 기능을 수행하는 등가물을 해당 언어로 가지고 있습니까? 아니면 더 이상 중요하지 않은 포인터의 기능입니까?

나는 대략적인 아이디어가 있지만, 경험 많은 프로그래머의 의견을 듣고 싶습니다.

+1

[Java 참조가 C 포인터와 다른 점은 무엇입니까?] (http://programmers.stackexchange.com/ q/141834/4978) –

+0

[자바에 포인터가없는 이유는 무엇입니까?]를 참조하십시오. (http://stackoverflow.com/questions/8080617/why-doesnt-java-have-pointers) –

답변

5

왜 그렇습니까?

일반적으로 포인터는 너무 위험하므로 현대 언어는 직접적인 사용을 피하려고합니다.

해당 언어에는 포인터와 같은 기능을 수행하는 등가물이 있습니까? 아니면 더 이상 중요하지 않은 포인터 기능입니까?

기능이 매우 중요합니다. 그러나 포인터를 덜 위험하게 만들기 위해 포인터는 참조와 같이 덜 독성이있는 유형으로 추상화되었습니다.

기본적으로 이것은 더 엄격한 타이핑과 포인터 계산의 부족으로 이어집니다. 자바에서

+0

실제로 포인터, 그냥 arithmatic없이? – Boyang

+0

@CharlesW. 네, 깊이 파고 들면, 그들은 단지 포인터 일뿐입니다. (컴퓨터가 기본 작업을 통해 실제로 데이터에 액세스 할 수있는 제한된 방법에 대해 생각해보십시오.) 그러나 모든 것은 많이 추상화되어 있으므로 C 포인터로 할 수있는 불쾌한 (재미있게) 작업을 수행 할 수 없습니다.C++에는 여전히 포인터가 있지만, 그 이유는 대부분 C와 호환되어야하기 때문입니다. – Jiminion

0

:

  • , 당신은 당신이 "새로운"로 인스턴스화하는 클래스의 인스턴스에 대한 참조가 대신 당신의 malloc으로 할당 구조체에 대한 포인터를 필요없이. (Java에서는 C/C++ 에서처럼 힙에있는 객체에 대한 메모리를 직접 할당 할 수 없습니다.)
  • 프리미티브에는 포인터가 없지만 객체에 int, double 등을 래핑하기위한 라이브러리가 기본 라이브러리에 내장되어 있습니다. Integer, Double).
1

대부분의 객체 지향 언어는 C 포인터로 객체를 구현하지만 추상이며 값을 변경할 수 없습니다. 그래서 this/self를 사용할 때 대부분의 경우 포인터가됩니다 (일부 언어는 더 빠른 가비지 재 확보 및 기타 최적화를위한 객체 테이블을 가질 수 있습니다).

Object t = new A(); 
t = new B(); 

당신은 장면 뒤에 포인터를 교환하고 있습니다 : 자바에서 예를 들어

당신이 뭔가를 할 때. 어떤 언어는 Go와 같은 포인터 개념을 다시 도입하지만, 산술 연산은 할 수 없습니다.

그래서 어떤 방식 으로든 포인터는 더 좋은 방법으로 구현 된 언어에서 사라지지 않습니다. C가 포인터를 디자인하는 방식은 전혀 좋지 않지만 그 목적을 수행합니다. 그것은 여러 가지 이유로 좋지 않습니다. 하나는 : 당신이 프로그램의 불변성을 깨뜨리는 것입니다. 나는 그것을 피할 뜻이 아니며 물론 C에서 중요합니다.

관련 문제