이중성(예: 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"
}
의 재할당x
에f()
이외의 인수의 값에 영향을 주지 않는다.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
'programing' 카테고리의 다른 글
VueJS 구성 요소에서 중복 이벤트를 내보냅니다. (0) | 2022.07.28 |
---|---|
Vuex: 상태가 업데이트되지만 계산된 속성이 업데이트되지 않음 (0) | 2022.07.28 |
Vue JS의 확인란에 대한 적절한 양방향 바인딩 (0) | 2022.07.28 |
반복자를 목록으로 변환 (0) | 2022.07.28 |
Java에서 파일로 바이트 [] (0) | 2022.07.28 |