Вопросы с тегом «pointers»

89
shared_ptr магия :)

Мы с мистером Лидстремом поссорились :) Г-н Лидстрём утверждает, что конструкция shared_ptr<Base> p(new Derived);не требует наличия виртуального деструктора в Base: Армен Цирунян : «Правда? Будет ли shared_ptr правильно очищаться? Не могли бы вы в этом случае продемонстрировать, как этот...

88
Как сравнить указатели?

Предположим, у меня есть 2 указателя: int *a = something; int *b = something; Если я хочу сравнить их и посмотреть, указывают ли они на одно и то же место, работает ли (a == b)?

88
Есть ли неатомарный эквивалент std :: shared_ptr? А почему его нет в <памяти>?

Это вопрос из двух частей, касающихся атомарности std::shared_ptr: 1. Насколько я могу судить, std::shared_ptrэто единственный умный указатель в <memory>этом атомарном. Мне интересно, есть ли std::shared_ptrдоступная неатомарная версия (я ничего не вижу <memory>, поэтому я также открыт...

88
Значение int (*) (int *) = 5 (или любое целочисленное значение)

Я не могу понять этого: int main() { int (*) (int *) = 5; return 0; } Приведенное выше назначение компилируется с g ++ c ++ 11. Я знаю, что int (*) (int *)это указатель на функцию, которая принимает (int *)аргумент as и возвращает int, но я не понимаю, как вы могли бы приравнять его к 5. Сначала я...

86
В чем разница между ссылкой на C # и указателем?

Я не совсем понимаю разницу между ссылкой на C # и указателем. Они оба указывают на место в памяти, не так ли? Единственное различие, которое я могу понять, заключается в том, что указатели не так умны, не могут указывать ни на что в куче, не подлежат сборке мусора и могут ссылаться только на...

86
Почему инициализация значения «int * ptr = int ()» не является незаконной?

Следующий код (взят отсюда ): int* ptr = int(); компилируется в Visual C ++ и инициализирует указатель значением. Как такое возможно? Я имею в виду, что int()дает объект типа, intи я не могу присвоить intуказателю. Как приведенный выше код не является незаконным?...

84
Почему в обработчиках HTTP на Go ResponseWriter - значение, а указатель - Request?

Я изучаю Go, написав приложение для GAE, и это подпись функции обработчика: func handle(w http.ResponseWriter, r *http.Request) {} Я новичок в указателе, так почему же Requestобъект является указателем, а ResponseWriterне указателем ? Есть ли необходимость в этом или это просто для того, чтобы...

84
Всегда ли указатель с правильным адресом и типом является действительным указателем, начиная с C ++ 17?

(В отношении этого вопроса и ответа .) До стандарта C ++ 17 в [basic.compound] / 3 было включено следующее предложение : Если объект типа T расположен по адресу A, говорят, что указатель типа cv T *, значением которого является адрес A, указывает на этот объект, независимо от того, как было...

82
Пример использования shared_ptr?

Привет, я сегодня задал вопрос о том, как вставлять разные типы объектов в один и тот же векторный массив, и мой код в этом вопросе был gate* G[1000]; G[0] = new ANDgate() ; G[1] = new ORgate; //gate is a class inherited by ANDgate and ORgate classes class gate { ..... ...... virtual void Run() {...

81
const char * и char const * - это одно и то же?

Насколько я понимаю, constмодификаторы следует читать справа налево. Из этого я понял: const char* - это указатель, элементы char которого нельзя изменить, но сам указатель может, и char const* постоянный указатель на mutableсимволы. Но я получаю следующие ошибки для следующего кода: const char* x...

81
«Int * nums = {5, 2, 1, 4}» вызывает ошибку сегментации

int *nums = {5, 2, 1, 4}; printf("%d\n", nums[0]); вызывает segfault, тогда как int nums[] = {5, 2, 1, 4}; printf("%d\n", nums[0]); нет. В настоящее время: int *nums = {5, 2, 1, 4}; printf("%d\n", nums); печатает 5. Основываясь на этом, я предположил, что обозначение инициализации массива, {},...

80
Вывести адрес или указатель на значение в C

Я хочу сделать что-то довольно простое. Я получаю результаты, но проблема в том, что у меня нет возможности узнать, верны ли результаты. Я работаю на C, и у меня есть два указателя; Я хочу распечатать содержимое указателя. Я не хочу разыменовать указатель, чтобы получить указанное значение, мне...

73
Могу ли я использовать NULL в качестве замены для значения 0?

Могу ли я использовать NULLуказатель в качестве замены для значения 0? Или что-то не так в этом? Как, например: int i = NULL; как замена для: int i = 0; В качестве эксперимента я скомпилировал следующий код: #include <stdio.h> int main(void) { int i = NULL; printf("%d",i); return 0; } Вывод:...

59
Что делает ((void (*) ()) buf) (); жадный?

Я решаю проблему бинарной эксплуатации на picoCTF и наткнулся на этот фрагмент кода: ((void (*)())buf)(); где bufмассив символов. Я решил проблему, но не могу понять, что именно он делает. Я посмотрел на эту ветку, но не смог разобрать. Что ((void...

38
Почему эта заявка на разыменование предупреждающего указателя типа зависит от компилятора?

Я читал различные сообщения о переполнении стека RE: ошибка разыменовывающего указателя типа. Насколько я понимаю, ошибка, по сути, является предупреждением компилятора об опасности доступа к объекту через указатель другого типа (хотя, похоже, для этого сделано исключение char*), что является...

34
Инкремент указателя на динамический массив размером 0 не определен?

AFAIK, хотя мы не можем создать массив статической памяти размером 0, но мы можем сделать это с динамическими: int a[0]{}; // Compile-time error int* p = new int[0]; // Is well-defined Как я читал, pдействует как элемент «один конец». Я могу напечатать адрес, на который pуказывает. if(p) cout...

33
Как работает сравнение указателей в C? Можно ли сравнивать указатели, которые не указывают на один и тот же массив?

В главе 5 K & R (язык программирования C, 2-е издание) я прочитал следующее: Во-первых, указатели могут сравниваться при определенных обстоятельствах. Если pи qуказывают на элементы одного и того же массива, то соотношения нравится ==, !=, <, >=и т.д. работать должным образом. Кажется,...

26
Есть ли в C эквивалент std :: less из C ++?

Недавно я отвечал на вопрос о неопределенном поведении p < qв C, когда pи qесть указатели на разные объекты / массивы. Это заставило меня задуматься: <в этом случае C ++ имеет такое же (неопределенное) поведение , но также предлагает стандартный шаблон библиотеки, std::lessкоторый...

26
Является ли void * function () указателем на функцию или функцию, возвращающую void *?

Я запутался в значении void *function(). Это указатель на функцию или возвращаемую функцию void*? Я всегда использовал его в структурах данных как рекурсивную функцию, возвращающую указатель, но когда я увидел код в многопоточности ( pthread), было одно и то же объявление функции. Теперь я...