programing

이중성(예: Double Star(예:NSERror **?

itsource 2022. 7. 28. 23:02
반응형

이중성(예: Double Star(예:NSERror **?

그래서 이걸 봤어요

error:(NSError **)error

사과 박사님의 집에서요왜 별 두 개야?어떤 의미가 있을까요?

"이중 별"은 포인터에 대한 포인터입니다.그렇게NSError **유형 객체에 대한 포인터입니다.NSError기본적으로 함수에서 오류 개체를 반환할 수 있습니다.에 대한 포인터를 작성할 수 있습니다.NSError함수 내의 객체(call it)*myError그리고 다음과 같은 작업을 수행합니다.

*error = myError;

에러를 발신자에게 「반환」합니다.


아래 코멘트에 대한 답변:

단순하게 사용할 수 없습니다.NSError *C에서는 함수 파라미터가 값으로 전달되기 때문에 함수에 전달될 때 값이 복사됩니다.예를 들면, 다음의 C 코드의 일부를 참조해 주세요.

void f(int x)
{
    x = 4;
}

void g(void)
{
    int y = 10;
    f(y);
    printf("%d\n", y);    // Will output "10"
}

의 재할당xf()이외의 인수의 값에 영향을 주지 않는다.f()(인g()예를 들어)를 참조해 주세요.

마찬가지로 포인터가 함수에 전달되면 해당 값이 복사되며 재할당해도 함수 외부의 값에는 영향을 주지 않습니다.

void f(int *x)
{
    x = 10;
}

void g(void)
{
    int y = 10;
    int *z = &y;
    printf("%p\n", z);    // Will print the value of z, which is the address of y
    f(z);
    printf("%p\n", z);    // The value of z has not changed!
}

물론, 우리는 그 가치를 바꿀 수 있다는 것을 알고 있습니다.z다음과 같은 점을 쉽게 지적할 수 있습니다.

void f(int *x)
{
    *x = 20;
}

void g(void)
{
    int y = 10;
    int *z = &y;
    printf("%d\n", y);    // Will print "10"
    f(z);
    printf("%d\n", y);    // Will print "20"
}

따라서, 그 가치를 바꾸는 것은 당연하다.NSError *포인터도 포인터에 넘겨야 합니다.

C에서는 모든 것이 값으로 전달됩니다.값을 변경하려면 해당 주소(메모리 주소 값)를 전달합니다.포인터가 가리키는 위치를 변경하려면 포인터의 주소를 전달합니다.

간단한 설명은 여기를 보세요.

C에서 쌍성은 포인터에 대한 포인터입니다.이렇게 하는 데는 몇 가지 이유가 있습니다.첫 번째는 포인터가 포인터의 배열에 있을 수 있다는 것입니다.또 다른 이유는 포인터를 함수에 전달하고 함수가 포인터를 수정하는 것입니다(다른 언어의 "out" 매개 변수와 유사).

쌍성(**) 표기법은 클래스 내의 변수를 초기화하는 데 고유하지 않습니다.그것은 단순히 사물에 대한 이중 간접 참조일 뿐이다.

float myFloat; // an object
float *myFloatPtr; // a pointer to an object
float **myFloatPtrPtr; // a pointer to a pointer to an object
        
myFloat = 123.456; // initialize an object
myFloatPtr = &myFloat; // initialize a pointer to an object
myFloatPtrPtr = myFloatPtr; // initialize a pointer to a pointer to an object
        
myFloat; // refer to an object
*myFloatPtr; // refer to an object through a pointer
**myFloatPtrPtr; // refer to an object through a pointer to a pointer
*myFloatPtrPtr; // refer to the value of the pointer to the object

더블 포인터 표기법은 발신자가 자신의 포인터 중 하나를 함수 호출에 의해 변경할 필요가 있음을 의도하는 경우에 사용되며, 따라서 객체의 주소가 아닌 포인터의 주소가 함수에 전달됩니다.

예를 들어 링크된 목록을 사용할 수 있습니다.발신자는 첫 번째 노드에 대한 포인터를 유지합니다.발신자는 검색, 추가 및 삭제 기능을 호출합니다.이러한 조작에 첫 번째 노드의 추가 또는 삭제가 포함되는 경우는, 어느 노드의 .next 포인터가 아니고, 발신자의 포인터를 변경할 필요가 있습니다.이 작업을 수행하려면 포인터의 주소가 필요합니다.

C와 같은 경우 포인터에 대한 포인터를 의미합니다.

언급URL : https://stackoverflow.com/questions/604099/what-is-double-star-eg-nserror

반응형