Я подозреваю, что это - случай, "не добавляет ничто к языку, если это действительно не увеличивает стоимость" - и это рассматривалось как добавляющий достаточно мало значения для не ценности того. Как Вы сказали, легко двигаться, и откровенно это редко необходимо так или иначе (только для разрешения неоднозначности).
то же верно в C#, и я особенно никогда не пропускал его ни на одном языке. То, что я действительно пропускаю в Java, является неподписанным типом байта:)
const char *
- это, как вы сказали, указатель на char, где вы не можете изменить значение char (по крайней мере, не через указатель (без приведения constness прочь)).
char * const
- это указатель на char, где вы можете изменить char, но не можете заставить указатель указывать на другой char.
const char * const
- это постоянный указатель на постоянный символ, т.е. вы не можете изменить ни место, где указывает указатель, ни значение указателя.
//pointer to a const
void f1()
{
int i = 100;
const int* pi = &i;
//*pi = 200; <- won't compile
pi++;
}
//const pointer
void f2()
{
int i = 100;
int* const pi = &i;
*pi = 200;
//pi++; <- won't compile
}
//const pointer to a const
void f3()
{
int i = 100;
const int* const pi = &i;
//*pi = 200; <- won't compile
//pi++; <- won't compile
}
Вы должны попробовать cdecl
:
~ $ cdecl Type `help' or `?' for help cdecl> explain const char *someArray declare someArray as pointer to const char cdecl> explain char * const someArray declare someArray as const pointer to char cdecl> explain const char * const s2 declare s2 as const pointer to const char cdecl>
char * const array;
Это означает, что указатель постоянный. Также
const * const char array;
означает постоянный указатель на постоянную память.
Повторение того, что написали другие пользователи, но я хочу предоставить контекст.
Возьмите эти два определения:
void f1(char *ptr) {
/* f1 can change the contents of the array named ptr;
* and it can change what ptr points to */
}
void f2(char * const ptr) {
/* f2 can change the contents of the array named ptr;
* but it cannot change what ptr points to */
}
Создание самого указателя const
, например в примере с f2 абсолютно почти бессмысленно. Каждый параметр, переданный в функцию, передается по значению. Если функция изменяет это значение, она изменяет только свою локальную копию и не влияет на вызывающий код.
/* ... calling code ... */
f1(buf);
f2(buf);
В любом случае buf
не изменяется после вызова функции.
Рассмотрим strcpy ( ) function
char *strcpy(char *dest, const char *src);
Одна из возможных реализаций -
char *strcpy(char *dest, const char *src) {
char *bk = dest;
while (*src != '\0') {
*dest++ = *src++;
}
*dest = *src;
return bk;
}
Эта реализация изменяет как dest
, так и src
только внутри функции. Создание одного из указателей (или обоих) const
ничего не даст ни для функции strcpy (), ни для вызывающего кода.
Создайте видеопрезентацию, представляющую сайт прототипа. Убедитесь, что громкость очень низкая (так как она на слишком большом количестве видео), поэтому он должен включить громкость, чтобы услышать ее. В конце презентации, дайте URL на сайт прототипа, чтобы он мог опробовать его для себя, нормальный громкость (теперь взрывной так как он свернул громкость) аудио включены.
-121--2359706-если вы находитесь в окне, отредактируйте файл\windows\system32\drivers\etc\hosts и добавьте следующую строку:
127.0.0.1 username.mysite.com
, затем, когда сервер работает, вы можете открыть браузер и набрать:
http://username.mysite.com
http://username.mysite.com:8080
или что угодно и посмотреть веб-сайт.
Для этого потребуются права администратора.
Если вы находитесь в linux, вам потребуется отредактировать/etc/hosts и сделать то же самое.
Однако при развертывании необходимо настроить веб-сервер и DNS-сервер. так что, если вы хотите получить полный опыт, вы должны установить DNS-сервер локально и использовать его в качестве вашего nameserver сетей. это более сложная задача, и инструкции зависят от того, находитесь ли вы на linux или windows, и какой веб-сервер вы используете.
Затем вы должны написать немного кода в вашем приложении, чтобы проверить переменные сервера, чтобы выяснить, какой поддомен был использован, и выполнить обработку на основе этого.
-121--2991126-Из какова разница между const int *, const int * const, int const * :
Читать назад...
int * - указатель на int int const * - указатель на const int int * const - указатель на int int const * const - указатель на const int