Запитання з тегом «pointers»

Тип даних, що "вказує" на інше значення, збережене в пам'яті. Змінна вказівника містить адресу пам'яті якоїсь іншої сутності (змінної чи функції чи іншої сутності). Цей тег слід використовувати для запитань щодо використання покажчиків, а не посилань. Найпоширенішими мовами програмування, що використовують покажчики, є мови C, C ++, Go та збірки. Використовуйте певний мовний тег. Інші корисні теги - метод, функція, структура тощо, що описують використання покажчика.


7
C ++ передає масив за посиланням
чи дозволено це передавати масив за посиланням? void foo(double& *bar) Здається, мій компілятор каже ні. Чому? Який правильний спосіб передавати масив за посиланням? Або попрацювати? У мене є аргумент масиву, який мій метод повинен змінити, і який я повинен отримати потім. Як варіант, я міг би зробити цей масив членом …

7
Чи правильність const надає компілятору більше простору для оптимізації?
Я знаю, що це покращує читабельність і робить програму менш схильною до помилок, але наскільки це покращує продуктивність? І на додаток, яка основна різниця між посиланням та constпокажчиком? Я б припустив, що вони зберігаються в пам'яті по-різному, але як так?

3
Чому корисний покажчик від точки до волатильності, на зразок “volatile int * p”?
volatileполягає в тому, щоб сказати компілятору не оптимізувати посилання, щоб кожне читання / запис не використовувало значення, що зберігається в регістрі, а робило реальний доступ до пам'яті. Я розумію, що це корисно для якоїсь звичайної змінної, але не розумію, якvolatile впливає на покажчик. volatile int *p = some_addr; int a …
78 c  pointers  volatile 

15
Коли цілочисельний <-> покажчик фактично правильний?
Поширений фольклор каже, що: Система типів існує з певної причини. Цілі числа та покажчики є різними типами, в більшості випадків перекидання між ними є неправомірною практикою, може вказувати на помилку проектування, і її слід уникати. Навіть коли виконується такий привід, не слід робити припущення щодо розміру цілих чи покажчиків ( …
77 c++  c  pointers  casting 

5
Коли використовувати вказівники в C # /. NET?
Я знаю, що C # надає програмісту можливість доступу, використання покажчиків у небезпечному контексті. Але коли це потрібно? За яких обставин використання вказівників стає неминучим? Це лише з міркувань продуктивності? Також чому С # виставляє цю функціональність через небезпечний контекст і вилучає з неї всі керовані переваги? Чи можна теоретично …

23
Чому б не використовувати покажчики для всього в C ++?
Припустимо, що я визначив якийсь клас: class Pixel { public: Pixel(){ x=0; y=0;}; int x; int y; } Потім напишіть код, використовуючи його. Чому я повинен робити наступне? Pixel p; p.x = 2; p.y = 5; Виходячи зі світу Java, я завжди пишу: Pixel* p = new Pixel(); p-&gt;x = …
75 c++  pointers  stack  heap 


12
Покажчики на покажчики проти звичайних покажчиків
Призначення вказівника - зберегти адресу певної змінної. Тоді структура пам'яті наступного коду повинна виглядати так: int a = 5; int *b = &amp;a; ...... адреса пам'яті ...... значення a ... 0x000002 ................... 5 b ... 0x000010 ..... .............. 0x000002 Гаразд Тоді припустимо, що зараз я хочу зберегти адресу вказівника * …
74 c  pointers 

18
Перевірка, виділено вказівнику пам’ять чи ні
Чи можемо ми перевірити, чи вказівник, переданий функції, виділений пам'яттю чи ні в C? Я написав власну функцію в C, яка приймає покажчик символів - buf [вказівник на буфер] та size - buf_siz [розмір буфера]. Насправді перед викликом цієї функції користувач повинен створити буфер і виділити йому пам'ять buf_siz. Оскільки …
74 c  pointers 

16
Дублювання об'єктів у Java
Я дізнався, що коли ви змінюєте змінну в Java, вона не змінює змінну, на якій вона базувалася int a = new Integer(5); int b = a; b = b + b; System.out.println(a); // 5 as expected System.out.println(b); // 10 as expected Я припускав подібне для об'єктів. Розглянемо цей клас. public …

7
Чи можна використовувати NULL як заміну для значення 0?
Чи можна використовувати NULLвказівник як заміну для значення 0? Або щось не так у цьому робити? Наприклад, наприклад: int i = NULL; як заміна для: int i = 0; Як експеримент я склав наступний код: #include &lt;stdio.h&gt; int main(void) { int i = NULL; printf("%d",i); return 0; } Вихід: 0 …

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

6
Чому це твердження, що вимагається перенаправлення на тип-покарання покажчика, що відповідає компілятору попередження?
Я читав різні повідомлення про Stack Overflow 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 &lt;&lt; …

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.