Если вы хотите установить значение указателя и передать его обратно, то b()
должна возвращать указатель:
int a(void) {
char *p = NULL;
p = b(p);
printf("%s", p);
return 0;
}
char * b(char * ptr) {
ptr = "test string";
return ptr;
}
Здесь p
инициализируется NULL
избежать неопределенного поведения с пропусканием неинициализированное значение для функции. Вы также можете инициализировать p
в другой строковый литерал. Внутри b
, ptr
- копия указателя p
, который был отправлен в b
. Когда вы переназначаете значение, хранящееся в ptr
, на адрес строкового литерала "test string"
, исходный указатель p
не изменился. Пройдя ptr
обратно к вызывающей функции и переназначив p
на возвращаемое значение b
, вызывающая функция может использовать обновленное значение.
Как @M.M указывает на комментарии, это несколько избыточно. Функция b()
может вместо того, чтобы объявить указатель своего собственного, инициализируется строкового литерала:
int a(void) {
char *p = b();
printf("%s", p);
return 0;
}
char * b(void) {
char *ptr = "test string";
return ptr;
}
Я знаю, что это придирки, но я хотел бы изменить 'символ **' 'к сопзЬ гольца **', потому что постоянная строка. – d3L
Я сам не очень разбираюсь в использовании указателя const, поэтому не могу этого предложить. – Pbd
'' Операция печати '' является постоянной строкой и, скорее всего, будет помещена в раздел только для чтения исполняемого файла. Модификация приведет к сбою. 'const char *' '' предотвращает '' модификацию строки. – d3L