문제

이 기능이 선언 C#:

void foo(string mystring)

과 같은 이 중 하나에서 C:

void foo(char *)

즉C#에서는 라는 함수를 받게 포인터를 뒤?

도움이 되었습니까?

해결책

이 특정한 경우에서,그것은 더 많은 다음과 같:

void foo(const char *);

.Net 문자열은 변경할 수 없으며 참조에 의해 전달됩니다.그러나,일반적으로 C#을 받는 포인터 또는 개체에 대한 참조가 있습니다.

다른 팁

가 있는 포인터에서 뒤에서는 C#지만,그들은 더 C++'s 똑똑한 포인터,그래서 원 포인터는 캡슐화됩니다.Char*정말 되지 않습니다 같은 시스템입니다.문자열이기 때문에 포인터를 char 일반적으로 의미의 시작을 문자 배열,그리고 C#문자열은 개체와 함께 길이드 문자 배열입니다.포인터를 외부 구조는 점으로 같은 것 wchar_t 배열을,그래서 거기에 몇 가지 간접 C#문자열과 넓은 문자의 유니코드 지원합니다.

No.에서는 C#(모니다.NET 개 언어)문자열은 데이터를 입력합니다.그것은 단지의 문자 배열이다.변환할 수 있습니다 그리고 사진들이지만 동일하게 동작합니다.많은 문자열 조작 방법(다음과 같"Substring()"과"StartsWith")을 사용할 수 있는 String 클래스에 적용되지 않는 배열에는 문자 배열은 단순히 인스턴스의.

기본적으로,그렇습니다.C#에서 문자열이다(실제로 시스템입니다.문자열)참조형,그래서 때 foo()를 호출,그것은 받으면 포인터를 문자열에 힙.

에 대한 가치 유형(int,더블,etc.), 기능 복사본을 받의 값으로 설정합니다.다른 객체를 위해,그것은 참조를 가리키는 원래 개체입니다.

문자열이 특별하기 때문에 그들은 변경할 수 없습니다.기술적으로 의미는 그것이 통과를 참조하지만,연습으로 동작할 것입니다 꽤 많은 같은 값을 입력.

할 수 있는 힘을 가치 유형을 통과한 참조를 사용하여 ref 키워드:

public void Foo(ref int value) { value = 12 }
public void Bar()
{
    int val = 3;
    Foo(ref val);
    // val == 12
}

아 c#에서 문자열은 유니코드입니다.c#그렇지 않 라는 포인터이지만,reference.

만약 당신이 평균이는 방법에 액세스하도록 허용할 내용의 문자 공간,응답은 예입니다.

그렇기 때문에,문자열의 크기를 동적,그렇게 있어야 합 힙 메모리 뒤에

그러나 그들이 동일하지 않습니다.

c 에서 포인터 포인트는 문자열을 사용할 수도 있습 다른 곳에서,그래서 그것을 변경하는 것입니다 그 효과는 다른 장소입니다.

으로 지금까지 내가 아는 모든 클래스에서는 C#(에 대한 확실하지 않는 다른 사람)를 참조 형식입니다.

아무것도 아니라"값 유형",본질적으로 커버를 열거형,부울 및 내에 숫자 형식,전달됩니다""를 참조하여,이는 거의 틀림없이 동일한으로 C/C++의 메커니즘을 참조에 의한 전달 또는 포인터이다.구문 및 기능적으로 그것은 본질적으로 동일하는 C/C++전달합니다.

그러나,C#에서 문자열은 변경할 수 없다,그래서 비록 그것을 참조에 의해 전달되는 수정할 수 없는 문자열을 만들지 않고 새로운 하나입니다.

또한 참고할 수 있는지 논쟁"const"C#는지 여부에 관계없이 그것은 값을 입력 또는 참조 형식입니다.

그 동안은 실제로 상당에서 의미의 감각을(즉코드가 뭔가를 함께 문자열),C#,Java 와 같은,계속 포인터를 완전히는 그것의 일상적인 사용,관들이 같은 영역을 전환하기본 OS 함수도 다음,거기에 프레임워크 클래스는 그 멋지게 등 SafeFileHandle.

긴 이야기를 짧은 가지 마세요 당신의 방법으로 생각하고 포인터에서 C#.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top