Лучшие pointer-arithmetic вопросы ИТ разработчиков

  • 5 голосов
  • 4 ответа
  • 0 просмотров
4 ответа

Использование пустого указателя на массив

Я просто пытался использовать пустой указатель на целочисленный массив, я пытался посмотреть, смогу ли я напечатать массив обратно, приведя его обратно в int. Но это дает мне какое-то случайное значение. Можете ли вы сказать мне, где я иду не ...

Задан 11 Jan 2012, 00:42 от Anusha Pachunuri
  • 10 голосов
  • 6 ответов
  • 0 просмотров
6 ответов

C / C ++: арифметика указателей

Я немного читал в арифметике с указателями и натолкнулся на две вещи, которые я не мог понять и не знаю, как они используются.

Задан 27 Sep 2018, 10:58 от alkMohamed Ahmed Nabil
  • 1500 голосов
  • 17 ответов
  • 0 просмотров
17 ответов

With arrays, why is it the case that a[5] == 5[a]?

Как указывает Джоэл вПодкаст переполнения стека # 34, вЯзык программирования C (иначе: K & R), есть упоминание об этом свойстве массивов в C:

Задан 19 Dec 2008, 17:01 от Dinah
  • 12 голосов
  • 3 ответа
  • 0 просмотров
3 ответа

@Oliv Я подозреваю, что источником UB является не арифметика указателей, а преобразование массива в указатель, применяемое к массиву вне его времени жизни.

те рассмотрим этот пример кода: struct sso { union { struct { char* ptr; char size_r[8]; } large_str; char short_str[16]; }; const char* get_tag_ptr() const { return short_str+15; } };В[Basic.expr] ...

Задан 10 Jan 2018, 13:40 от Oliv
  • 13 голосов
  • 5 ответов
  • 0 просмотров
5 ответов

Указатель арифметики для структур

Учитывая определение структуры, которое содержит одну переменную типа double и три int (всего 4 переменные), если p является указателем на эту структуру со значением 0x1000, какое значение имеет p ++? Это не домашняя проблема, так что не ...

Задан 01 Oct 2011, 23:50 от user950891
  • 17 голосов
  • 6 ответов
  • 0 просмотров
6 ответов

Является ли получение адреса локальной переменной константным выражением в C ++ 11?

Следующая программа на C ++ 11: int x = 42; void f() { int y = 43; static_assert(&x < &y, "foo"); } int main() { f(); }Не компилируется с gcc 4.7, так как жалуется: error: ‘&y’ is not a constant expressionЭто согласуется с моей интуицией. ...

Задан 21 Aug 2013, 08:24 от Andrew Tomazos
  • 10 голосов
  • 1 ответ
  • 0 просмотров
1 ответ

В этом случае, если базовый адрес массива равен XYZ, то arr + i = XYZ + i * sizeof (arr) / sizeof (struct large)

звестно, что если вы обращаетесь к элементу массива какarr[i] в C, что вы также можете получить доступ к элементу какi[arr]потому что они просто сводятся к*(arr + i) и сложение коммутативно. У меня вопрос, почему это работает для типов данных ...

Задан 24 Aug 2011, 19:58 от RC Howe
  • 12 голосов
  • 2 ответа
  • 0 просмотров
2 ответа

Арифметика указателя в C

Рассмотрим следующий фрагмент кода: int (*p)[3]; int (*q)[3]; q = p; q++; printf("%d, %d\n", q, p); printf("%d\n", q-p);Я знаю, что арифметика указателей является интеллектуальной, а это означает, что операцияq++ достиженияq достаточно байтов, ...

Задан 17 Apr 2009, 09:05 от Ori Popowski
  • 3 голосов
  • 4 ответа
  • 0 просмотров
4 ответа

Почему при смене подписи main возникает ошибка segfault?

Я пытаюсь разобраться в C и написал эту программу, которая отображает килобайт моей оперативной памяти в случайном месте. Вот код, и он отлично работает:

Задан 25 Aug 2016, 20:58 от Loupax
  • 2 голосов
  • 8 ответов
  • 0 просмотров
8 ответов

Арифметика указателя, когда пустота имеет неизвестный размер [закрыто]

В Visual Studio C ++ версии 9 (и, возможно, в других версиях) следующий код: int a = sizeof(void); void const *b = static_cast<void const *>("hello world"); b += 6;Формируетэти [http://msdn.microsoft.com/en-us/library/9adz64y0.aspx] ...

Задан 08 Dec 2009, 03:18 от Matt Joiner
  • 10 голосов
  • 3 ответа
  • 0 просмотров
3 ответа

 указывает на последний элемент объекта массива. [...]

новании этого вопроса (странный выходной вопрос в с [https://stackoverflow.com/questions/51043235/strange-output-issue-in-c/51043333#51043333] ) был ответ (предоставлено ...

Задан 26 Jun 2018, 17:46 от Michi
  • 38 голосов
  • 11 ответов
  • 0 просмотров
11 ответов

Доступ к значениям массива с помощью арифметики указателей и подписки в C

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

Задан 24 Oct 2008, 11:25 от John Rudy
  • 4 голосов
  • 2 ответа
  • 0 просмотров
2 ответа

@ Олив: Нет, я не говорил, что это неопределенное поведение. Это адрес члена массива, а арифметические правила указателя позволяют добавлять любое смещение, попадающее в тот же массив. Что определяет ваш пример.

те рассмотрим этот код: int i; int is[10]{}; unsigned char * p = reinterpret_cast<unsigned char*>(&i); //p defined to point to the object-representation of the first element of array ints unsigned char * ps = reinterpret_cast<unsigned ...

Задан 13 Oct 2017, 21:49 от Oliv
  • 4 голосов
  • 1 ответ
  • 0 просмотров
1 ответ

Адресная каноническая форма и арифметика указателей

На архитектурах, совместимых с AMD64, адреса должны быть в канонической форме перед разыменовкой.ОтРуководство Intel, раздел 3.3.7.1:В 64-битном режиме адрес...

Задан 16 Aug 2016, 14:35 от Banex
  • 1 голос
  • 2 ответа
  • 0 просмотров
2 ответа

 заявление. Но, похоже, мне придется больше узнать об итераторах. Они все еще очень новые и до этого неизвестного мне поста. Еще раз спасибо. Вы, вероятно, просто сэкономили мне дни на изучение томов литературы по C ++.

небольшого программирования на C я решил перейти прямо на C ++. Сначала я был рад присутствию класса string и возможности обрабатывать строки как целые единицы вместо массивов символов. Но вскоре я обнаружил, что строки в стиле C имеют ...

Задан 26 Feb 2011, 21:55 от Steve S
  • 8 голосов
  • 3 ответа
  • 0 просмотров
3 ответа

Указатель / разница адресов [дубликаты]

На этот вопрос уже есть ответ: C / C ++: арифметика указателей [/questions/11713929/c-c-pointer-arithmetic] 6 ответов Почему разница между двумя адресами неправильная?http: //codepad.org/NGDqFWj [http://codepad.org/NGDqFWjJ] #include<stdio.h> ...

Задан 24 Mar 2012, 20:47 от Ava
  • 0 голосов
  • 3 ответа
  • 0 просмотров
3 ответа

Арифметика указателей в C ++ использует увеличение размера (типа) вместо увеличения байта?

Меня смущает поведение арифметики указателей в C ++. У меня есть массив, и я хочу перейти N элементов вперед от текущего. Так как в C ++ указатель является а...

Задан 14 Jun 2012, 16:34 от Fy Zn
  • 1 голос
  • 7 ответов
  • 0 просмотров
7 ответов

Арифметика указателя точности байтов в C, когда sizeof (char)! = 1

Как можно переносить указательную арифметику с точностью до одного байта? Имейте в виду, что: char не 1 байт на всех платформахsizeof(void) == 1 доступно только как расширение в GCCХотя некоторые платформы могут иметь ограничения на ...

Задан 08 Dec 2009, 06:17 от Matt Joiner
  • 7 голосов
  • 6 ответов
  • 0 просмотров
6 ответов

Разница между двумя переменными указателя [дубликат]

На этот вопрос уже есть ответ здесь:Разница между указателем и адресом [дубликат] 3 ответаЯ задал этот вопрос в письменном тесте. при выполнении кода ниже на...

Задан 11 Jan 2015, 10:01 от Sushil
  • 14 голосов
  • 1 ответ
  • 0 просмотров
1 ответ

Указатель арифметики в го

Учитывая, что вы можете (не можете придумать отличный способ выразить это, но) манипулировать указателями в Go, возможно ли выполнять арифметику указателей, ...

Задан 21 Sep 2015, 17:13 от user5360268
  • 24 голосов
  • 1 ответ
  • 0 просмотров
1 ответ

Арифметика указателей через границы подобъектов

Имеет ли следующий код (который выполняет арифметику указателей через границы подобъектов) хорошо определенное поведение для типовT для которого он компилируется (который в C ++ 11,не обязательно должен быть ...

Задан 05 Mar 2013, 06:53 от 21 revs, 2 users 100%
  • 2 голосов
  • 1 ответ
  • 0 просмотров
1 ответ

Как происходит арифметика пустых указателей в GCC

int main() { int a; void *p; p = &a; printf("%ld\n",(long)p); p = p+1; printf("%ld\n",(long)p); }В этой программеp+1 просто увеличивает значение р на 1. Я знаю,void pointer arithmetic невозможно вC, такGCC делает это неявно. И если да, то ...

Задан 28 Oct 2012, 21:43 от RAM JI GUPTA