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

148
Как работает код C, который печатает от 1 до 1000 без циклов или условных операторов?

Я нашел Cкод, который печатает от 1 до 1000 без циклов или условных выражений : но я не понимаю, как это работает. Может кто-нибудь пройти код и объяснить каждую строку? #include <stdio.h> #include <stdlib.h> void main(int j) { printf("%d\n", j); (&main + (&exit -...

142
Указатель на уточнение указателя

Я следовал этому уроку о том, как работает указатель на указатель . Позвольте мне процитировать соответствующий отрывок: int i = 5, j = 6, k = 7; int *ip1 = &i, *ip2 = &j; Теперь мы можем установить int **ipp = &ip1; и ippуказывает, на ip1что указывает i. *ippесть ip1, и **ippесть i,...

142
Как объяснить указатели C (объявление против унарных операторов) новичку?

Недавно я имел удовольствие объяснять указатели новичку в программировании на C и наткнулся на следующую трудность. Это может показаться не проблемой, если вы уже знаете, как использовать указатели, но постарайтесь внимательно рассмотреть следующий пример: int foo = 1; int *bar = &foo;...

136
Как delete [] знает, что это массив?

Хорошо, я думаю, что мы все согласны с тем, что то, что происходит со следующим кодом, не определено, в зависимости от того, что передано, void deleteForMe(int* pointer) { delete[] pointer; } Указатель может быть разного рода, поэтому выполнение безусловного delete[]для него не определено. Тем не...

135
Не могу понять, как рассчитать квадрат числа

Я нашел функцию, которая вычисляет квадрат числа: int p(int n) { int a[n]; //works on C99 and above return (&a)[n] - a; } Возвращает значение n 2 . Вопрос в том, как это сделать? После небольшого тестирования я обнаружил, что между (&a)[k]и (&a)[k+1]есть sizeof(a)/ sizeof(int). Это...

131
Почему использование «нового» вызывает утечку памяти?

Сначала я выучил C #, а теперь начинаю с C ++. Насколько я понимаю, оператор newв C ++ не похож на оператор в C #. Можете ли вы объяснить причину утечки памяти в этом примере кода? class A { ... }; struct B { ... }; A *object1 = new A(); B object2 = *(new...

130
Передача ссылок на указатели в C ++

Насколько я могу судить, нет никаких причин, по которым мне нельзя разрешать передавать ссылку на указатель в C ++. Однако мои попытки сделать это терпят неудачу, и я не знаю почему. Вот что я делаю: void myfunc(string*& val) { // Do stuff to the string pointer } // sometime later { // ......

130
Что Visual Studio делает с удаленным указателем и почему?

В книге на C ++, которую я читал, говорится, что когда указатель удаляется с помощью deleteоператора, память в том месте, на которое он указывает, «освобождается» и может быть перезаписана. В нем также указано, что указатель будет продолжать указывать на то же место, пока он не будет переназначен...

130
Почему указатели на функции и указатели данных несовместимы в C / C ++?

Я читал, что преобразование указателя функции в указатель данных и наоборот работает на большинстве платформ, но не гарантируется. Почему это так? Разве оба не должны быть просто адресами в основной памяти и, следовательно, быть...

129
Концепция пустого указателя в программировании на C

Можно ли разыменовать указатель void без преобразования типов в языке программирования C? Кроме того, есть ли способ обобщить функцию, которая может получать указатель и сохранять его в указателе void, и, используя этот указатель void, можем ли мы создать обобщенную функцию? например: void abc(void...

128
Выражения-указатели: * ptr ++, * ++ ptr и ++ * ptr

Недавно я столкнулся с этой проблемой, которую сам не могу понять. Что ДЕЙСТВИТЕЛЬНО означают эти три выражения ? *ptr++ *++ptr ++*ptr Я пробовал Ричи. Но, к сожалению, не смог уследить за тем, что он рассказал об этих трех операциях. Я знаю, что все они выполняются для увеличения указателя /...

124
Указатели в Python?

Я знаю, что у Python нет указателей, но есть ли способ 2вместо этого получить этот yield >>> a = 1 >>> b = a # modify this line somehow so that b "points to" a >>> a = 2 >>> b 1 ? Вот пример: я хочу , form.data['field']и form.field.valueвсегда имеют одинаковое...

123
Разница между * ptr + = 1 и * ptr ++ в C

Я только начал изучать C, и когда делал один пример о передаче указателя на указатель в качестве параметра функции, я обнаружил проблему. Это мой пример кода: #include <stdio.h> #include <string.h> #include <stdlib.h> int* allocateIntArray(int* ptr, int size){ if (ptr != NULL){...

123
Как передать функцию-член, если ожидается бесплатная функция?

Вопрос в следующем: рассмотрите этот фрагмент кода: #include <iostream> class aClass { public: void aTest(int a, int b) { printf("%d + %d = %d", a, b, a + b); } }; void function1(void (*function)(int, int)) { function(1, 1); } void test(int a,int b) { printf("%d - %d = %d", a , b , a - b); }...

121
Почему в связанных списках используются указатели вместо хранения узлов внутри узлов

Я раньше много работал со связанными списками на Java, но я новичок в C ++. Я отлично использовал этот класс узла, который мне дали в проекте. class Node { public: Node(int data); int m_data; Node *m_next; }; но у меня был один вопрос, на который я не очень хорошо ответил. Зачем нужно использовать...

121
Какие реализации смарт-указателя C ++ доступны?

Сравнение, плюсы, минусы и когда использовать? Это побочный продукт ветки сборки мусора, где то, что я считал простым ответом, вызвало много комментариев о некоторых конкретных реализациях интеллектуальных указателей, поэтому казалось, что стоит начать новый пост. В конечном итоге вопрос...