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

Тип данных, который «указывает» на другое значение, хранящееся в памяти. Переменная-указатель содержит адрес памяти некоторой другой сущности (переменная или функция или другая сущность). Этот тег следует использовать для вопросов, связанных с использованием указателей, а не ссылок. Наиболее распространенными языками программирования, использующими указатели, являются C, C ++, Go и языки ассемблера. Используйте определенный языковой тег. Другими полезными тегами являются метод, функция, структура и т. Д., Описывающие использование указателя.

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

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


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

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

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

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

5
«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. Основываясь на этом, я предположил, что обозначение инициализации массива, {}, слепо загружает эти …
81 c  arrays  pointers 

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

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

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

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

6
Почему эта заявка на разыменование предупреждающего указателя типа зависит от компилятора?
Я читал различные сообщения о переполнении стека RE: ошибка разыменовывающего указателя типа. Насколько я понимаю, ошибка, по сути, является предупреждением компилятора об опасности доступа к объекту через указатель другого типа (хотя, похоже, для этого сделано исключение char*), что является понятным и разумным предупреждением. Мой вопрос относится к приведенному ниже коду: …
38 c  pointers  casting 

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.