символ* по сравнению с символом константы* в качестве параметра

Создание предварительно подписанного URL-адреса является чисто клиентской операцией. Это не связано с затратами AWS и сетевой активностью. Используемый вами SDK берет ваши текущие учетные данные, корзину и ключ для вашего объекта, ваш выбранный метод (например, GET), время истечения, а также рассчитывает и подписывает URL-адрес, все это делается локально.

37
задан Sunscreen 14 May 2015 в 10:25
поделиться

4 ответа

Если вам нужна разница между ними, просто представьте их как:

  • char * - указатель, который указывает на место, содержащее значение типа char, которое также можно изменить. Значение указателя может быть изменено, то есть указатель может быть изменен, чтобы указывать на разные места.
  • const char * - указатель, значение которого также может быть изменено, который указывает на местоположение, содержащее значение типа char, которое не может быть изменено .
48
ответ дан 27 November 2019 в 04:33
поделиться
  • символ *            : non-constant указатель на non-constant символ
  • символ константы *      : non-constant указатель на constant     символ
  • символ *константа        : constant     указатель на non-constant символ
  • символ константы * константа : constant     указатель на constant     символ

<час> Ссылка [ссылка]
1
ответ дан 27 November 2019 в 04:33
поделиться

Наверное, я слишком разборчив. В моей книге символы, на которые указывает const char *, могут быть изменены, но не через const char *. Const char * может указывать на изменяемое хранилище. Пример:

char a[] = "abracadabra";
const char * ccp = &a[0]; // ccp points to modifiable storage.
*&a[0] = 'o'; // This writes to a location pointed to by const char* ccp

Итак, моя формулировка такова:

Символ * - это указатель, который можно изменить и который также позволяет писать через него при разыменовании с помощью * или [].

const char * - это указатель, который можно изменить и который не позволяет писать через него при разыменовании с помощью * или [].

1
ответ дан 27 November 2019 в 04:33
поделиться

const char * означает "указатель на немодифицируемый символ". Обычно он используется для строк символов, которые не должны быть изменены.

Допустим, вы пишете эту функцию:

int checkForMatch(const char * pstr)

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

strupr(pstr);

Вы получите ошибку, говорящую, что вы не можете этого сделать, потому что strupr объявлена как:

char * strupr(char* str);

... и это означает, что она хочет иметь возможность писать в строку. Вы не можете писать в символы в const char * (для этого и существует const).

В общем, вы можете передать char * во что-то, что ожидает const char * без явного приведения, потому что это безопасно (передать что-то модифицируемое чему-то, что не собирается его модифицировать), но вы не можете передать const char * во что-то, ожидающее char * (без явного приведения), потому что это небезопасно (передача чего-то, что не предназначено для модификации, во что-то, что может его модифицировать).

Конечно, это C, и в C можно делать практически все, включая явное приведение const char * к char * - но это будет очень, очень плохая идея потому что есть (предположительно) какая-то причина, по которой то, на что указывает указатель, является const.

24
ответ дан 27 November 2019 в 04:33
поделиться
Другие вопросы по тегам:

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