Используя const char *
вместо char []
, строка будет храниться в памяти read only
. Это позволяет компилятору устранить дублирование строк.
Попробуйте запустить эту программу:
#include <stdio.h>
int main()
{
const char *s1 = "This is a string";
const char *s2 = "This is a string";
if (s1 == s2) {
puts("s1 == s2");
} else {
puts("s1 != s2");
}
}
Для меня это выводит s1 == s2
, что означает, что струна указатели указывают на то же место памяти.
Теперь попробуйте заменить const char *
с char []
:
int main()
{
const char s1[] = "This is a string";
const char s2[] = "This is a string";
if (s1 == s2) {
puts("s1 == s2");
} else {
puts("s1 != s2");
}
}
Это выводит s1 != s2
, что означает, что компилятор должен был дублировать строку памяти.
Используя char *
вместо char []
, компилятор может выполнить эти оптимизации, которые уменьшат размер исполняемого файла.
Также обратите внимание, что вы должны не использовать char *s = "string"
. Вместо этого вы должны использовать const char *s = "string"
. char *s
является устаревшим и небезопасным. Используя const char *
, вы избегаете ошибки передачи строки функции, которая пытается изменить строку.
Вы имеете в виду, почему бы не использовать 'char s [] =" моя строка здесь "; вместо этого? Также вы можете уточнить, что вы подразумеваете под символом «s», на самом деле не указывает на фактическое право памяти ». –