Можно ли использовать указатель на член структуры для доступа к другому члену той же структуры?

Это просто UPDATE. Попробуйте следующее.

UPDATE tableName
SET Credit = Credit + 7
WHERE ID = 1

обратите внимание, что ID = 1 и ID = '1' совпадают с тем, что сервер автоматически анализирует его.

3
задан Cacahuete Frito 12 March 2019 в 09:11
поделиться

2 ответа

Как сказал @ user694733, в случае, если между s.a и s.b есть заполнение, memcpy() обращается к области памяти, к которой не может получить доступ &a:

int a = 1;
int b;
b = *((char *)&a + sizeof(int));

Это Неопределенное поведение, и это в основном то, что происходит внутри memcpy().

0
ответ дан Cacahuete Frito 12 March 2019 в 09:11
поделиться

Во многих реализациях языка, написанного для описания стандарта C, попытка написать N-байтовый объект в структуре или объединении повлияла бы на значение не более N байтов в структуре или объединении. С другой стороны, на платформе, которая поддерживает 8-битные и 32-битные хранилища, но не 16-битные хранилища, если кто-то объявил тип типа:

struct S { uint32_t x; uint16_t y;} *s;

, а затем выполнил s->y = 23; без заботы о том, что случилось с двумя байтами после y, было бы быстрее выполнить 32-битное сохранение в y, слепо перезаписав два байта после него, чем выполнить пару 8-битных операций записи для обновления верхнего и нижние половины y. Авторы Стандарта не хотели запрещать такое обращение.

Было бы полезно, если бы в стандарт было включено средство, с помощью которого реализации могли бы указывать, могут ли записи в структуру или члены объединения нарушать хранилище за их пределами, а программы, которые могут быть нарушены при таком нарушении, могут отказываться работать в реализациях, где он может произойти. Однако авторы Стандарта, вероятно, ожидали, что программисты, которые будут заинтересованы в таких деталях, будут знать, на каком оборудовании должна работать их программа, и, таким образом, будут знать, будут ли такие помехи памяти проблемой для такого оборудования. [117 ]

К сожалению, современные авторы компиляторов, по-видимому, интерпретируют свободы, которые должны были помочь реализациям необычного оборудования, как открытое приглашение проявить «креативность» даже при нацеливании на платформы, которые могут эффективно обрабатывать код без таких уступок.

0
ответ дан supercat 12 March 2019 в 09:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: