В первом случае c
- указатель на строковую константу . Это , а не , то же самое, что указатель на массив .
c
- указатель на список символов, оканчивающийся нулевым символом в только для чтения памяти. Указатель можно переназначить так, чтобы он указывал на другой символ или строку символов.
Это полезно по нескольким причинам и поэтому включено в стандарты ANSI и GNU C. Наличие указателя на список целых чисел в постоянном запоминающем устройстве не так полезно, как перечисления или preprocesser # define вызовы, как правило, лучше.
Он не будет вести себя как массив, изменяющий значение символов, не определено - попробуйте вызвать: *c = 2
или *(c+1) = 4
.
Ниже приведен пример того, как функция может использовать строковую константу:
File *openPipeToProgram(int flag){
char *programname;
if(flag == PROGRAM1)
programname = "program1"
else if(flag == PROGRAM2)
programname = "program2"
else
return NULL;
return popen(programname, "w");
}
Обратите внимание, что PROGRAM1 и PROGRAM2 являются символическими c константами, которые используются вместо числовых массивов только для чтения.