#c #pointers
Вопрос:
const int* additional(int* s, int* f){
const int* ts = reinterpret_cast<const int*>(*s *f);
return ts;
}
int main() {
int a = 10, b = 20;
const int* oc = additional(amp;a, amp;b);
std::cout << *oc;
return 0;
}
Я пробовал использовать статику, хотя это приводит к той же ошибке
Комментарии:
1.
*s *f
это int, а не указатель.s
иf
не существуют, как только функция возвращает либо.
Ответ №1:
В вашем коде много чего не так.
*s *f
является int, а не указателем (вы добавляете разыменованные значения).
вы делаете reinterpret cast
то, что совсем не нужно. Просто передайте int напрямую, без указателей, и все готово.
const int additional(int s, int f){
return s f;
}
int main() {
int a = 10, b = 20;
const int oc = additional(a, b);
std::cout << oc;
return 0;
}
Ответ №2:
Вы переосмысливаете число 30 как указатель на const int и пытаетесь прочитать переосмысленный указатель. Операционная система заметила, что процесс пытается получить доступ к адресу, который не был сопоставлен для процесса, и отправила сигнал segfault для завершения процесса, чтобы защитить плохо работающий процесс от самого себя.
Переосмысление небезопасно. Не используйте его, если вы не знаете, что делаете. И когда вы поймете, что делаете, вы поймете, что необходимость в его использовании возникает довольно редко.
Я стремился сократить
int t = *f *s
;
Это уже очень мало. Функция, которую вы определили, намного длиннее, и поэтому это даже вызов функции. Обратите внимание, что выражение инициализатора, которое вы цитируете, имеет тип int
, в то время как ваша функция возвращает const int*
. Это, наряду со сломанной переосмыслением, является проблемой.
Если вы хотите сократить косвенное указание, то как насчет использования ссылок вместо указателей:
const intamp; f = a;
const intamp; s = b;
int t = a b; // shorter
Комментарии:
1. Я был полностью осведомлен и намеренно разыменовал параметры в попытке сделать так, чтобы локально созданный указатель указывал на умножение разыменованных значений, тем самым делая его доступным для main. Как бы претенциозно это ни звучало, я стремился сократить
int t = *f *s;
. Итак, теперь вопрос в том, возможно ли на самом деле реализовать это, так сказать, «сокращение»? Да, я новенькая.