Есть ли разница между:символ строки * против символьной строки []
char string = "name";
const char* point = string;
против
const char string[] = "name";
ли вы объяснить разницу тоже?
Есть ли разница между:символ строки * против символьной строки []
char string = "name";
const char* point = string;
против
const char string[] = "name";
ли вы объяснить разницу тоже?
Да.
Первый просто указывает только для чтения части памяти, декларация действительно должно быть:
const char* string = "name";
Второй создает массив достаточно долго, чтобы держать строку "name"
(так, четыре символа плюс один для null terminator) и копирует строку внутри выделенного пространства.
#include <stdio.h>
int main(int argc, const char** argv)
{
const char *a1 = "hello";
const char a2[] = "hello";
char* b1;
char* b2;
b2 = (char*) a2;
*b2 = 'c';
puts(b2);
b1 = (char*)a1;
*b1 = 'c';
puts(b1);
return 0;
}
b2 будет отображать «виолончель» должным образом. b1 вызовет ошибку сегментации.
Это связано с тем, что b1 хранится в текстовом сегменте кода, тогда как b2 хранится в сегменте данных.
я надеюсь, что я не испортить его ...
также, компилятор может сделать магию, чтобы сделать это недействительным признание того, что что-то объявляется на текстовом сегменте, но доступен в коде, так что C иногда цепляется, и объявление изменений в сегменте данных
Ну, во-первых, 'char string =" name "' недопустимо C. –