Что удваивает звезду (например, NSError **)?

Pyproj PyPI устарел. Вы можете установить GeoPandas через Conda или выполнить действия, описанные в этом выпуске GH https://github.com/geopandas/geopandas/issues/793 , и предварительно установить pyproj из Github через

pip install git+https://github.com/jswhit/pyproj.git#egg=pyproj

[ 114], а затем перейти к pip install geopandas.

51
задан Swanand Pangam 17 December 2014 в 09:43
поделиться

4 ответа

"Двойная звезда" является указателем на указатель. Так NSError ** указатель на указатель на объект типа NSError. Это в основном позволяет, Вы для возврата ошибки возражаете от функции. Можно создать указатель на NSError объект в функции (назовите его *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 в [1 110] не влияет на значение аргумента за пределами [1 111] (в [1 112], например).

Аналогично, когда указатель передается в функцию, ее значение копируется, и переприсвоение не будет влиять на значение за пределами функции.

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 * точки к, мы также должны передать указатель на указатель.

68
ответ дан mipadi 7 November 2019 в 09:53
поделиться

В C все - передача значением. Если Вы хотите изменить значение чего-то, что Вы передаете адрес его (который передает значение адреса памяти). Если Вы хотите измениться, где указатель указывает на передачу адреса указателя.

Смотрят здесь для простого объяснения .

44
ответ дан TofuBeer 7 November 2019 в 09:53
поделиться

В C двойная звезда является указателем на указатель. Существует несколько причин сделать это. Сначала то, что указатель мог бы быть к массиву указателей. Другая причина состояла бы в том, чтобы передать указатель на функцию, где функция изменяет указатель (подобный параметр на других языках).

10
ответ дан geofftnz 7 November 2019 в 09:53
поделиться

Если это - что-нибудь как C тогда ** , означает указатель на указатель.

4
ответ дан Andrew Hare 7 November 2019 в 09:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: