Вопросы по теме 'pointer-arithmetic'

Разница в указателе/адресе
Почему разница между двумя адресами неверна? http://codepad.org/NGDqFWjJ #include<stdio.h> int main() { int i = 10, j = 20; int *p = &i; int *q = &j; int c = p - q; printf("%d\n", p); printf("%d\n", q);...
18349 просмотров
schedule 07.04.2023

Визуализация OpenCV для понимания арифметики указателей
Я только изучаю OpenCV. В книге, которую я читаю, рекомендуется, чтобы для операций, в которых мне нужно касаться каждого пикселя, я использовал двойной цикл for с арифметикой указателя, stepWidth и т. д., чтобы переходить от одного к другому. Мне...
133 просмотров
schedule 08.07.2022

Сохранение разницы указателей в целых числах?
Это код: #include<stdio.h> #include<conio.h> int main() { int *p1,*p2; int m=2,n=3; m=p2-p1; printf("\np2=%u",p2); printf("\np1=%u",p1); printf("\nm=%d",m); getch(); return 0; } Это дает...
96 просмотров
schedule 30.06.2023

В чем разница между указателем на массив и указателем на указатель?
Я новичок в программировании и изучаю указатели в массиве. Я немного смущен прямо сейчас. Взгляните на программу ниже: #include <stdio.h> int fun(); int main() { int num[3][3]={23,32,478,55,0,56,25,13, 80};...
1325 просмотров

Указатель арифметики вокруг приведения
В настоящее время я обучаюсь в классе CS107, который делает следующие предположения: sizeof(int) == 4 sizeof(short) == 2 sizeof(char) == 1 прямой порядок байтов Мой профессор показал следующий код: int arr[5];...
639 просмотров
schedule 16.04.2022

Как компилятор знает, как увеличивать разные указатели?
Я понимаю, что в целом указатели на любой тип данных будут иметь одинаковый размер. В 16-битной системе обычно 2 байта, а в 32-битной системе - 4 байта. В зависимости от того, на что указывает этот указатель, если он увеличивается, он будет...
582 просмотров
schedule 19.02.2022

Вычитание регистров с помощью инструкции LEA?
Поддерживает ли инструкция LEA отрицательное смещение? mov rax, 1 lea rsi, [rsp - rax] Когда я использую приведенный выше код в моем asm-файле, я получаю сообщение об ошибке: $ nasm -f macho64 test.asm $ error: invalid effective address...
1334 просмотров

Разница указателей между двумя указателями int
int main(void) { int *a; int *b = a++; printf("%d\n",b-a); return 0; } Я ожидал, что на выходе будет 1, почему это -1? Предположим, что в приведенном выше вопросе вместо a++ у меня есть ++a . Это все еще неопределенное...
689 просмотров
schedule 15.02.2023

вычитание двух адресов дает неверный результат
int main() { int x = 4; int *p = &x; int *k = p++; int r = p - k; printf("%d %d %d", p,k,p-k); getch(); } Выход: 2752116 2752112 1 Почему не 4 ? А также я не могу использовать p+k или любой другой...
201 просмотров
schedule 05.02.2024

Как правильно разыменовать указатель массива typedef?
Я использую сторонний код, тип которого определен как: typedef float MarkerData[3]; позже в коде у меня есть массив данных о положении этого маркера, на который ссылаются как: MarkerData* Markers; Я использую этот код для...
144 просмотров
schedule 04.06.2022

Указатели: чтение нарушения прав доступа при попытке разыменования указателя путем добавления большого числа
Я пытаюсь больше изучить указатели, ниже приведен пример кода, который я пытаюсь Это работает: int *arth, art; art = 100; arth = &art; printf("arth address is %p arth+1 value is %d", arth, *(arth + 1)); теперь, если я попытаюсь...
720 просмотров

Есть ли арифметика указателя на неактивном члене объединения 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;...
596 просмотров

Почему последняя строка печатает 2 вместо 8?
&array[0] и &array[2] по отдельности печатают правильные значения, которые являются адресами массива [0] и массива [2] соответственно. Однако, когда я вычитаю два, печатается 2 вместо 8 , что является разницей двух адресов. Какие...
56 просмотров
schedule 15.11.2022

Арифметика указателя пошла не так
Я пытаюсь использовать char * для хранения строки, и поскольку указатель указывает на ячейку памяти первого char данной строки, я попытался использовать арифметику указателя ( ptr++ ) для перехода к следующему символу (поскольку они сохраняются...
93 просмотров
schedule 14.05.2022

В чем разница между a+i и &a[i] для арифметики указателей в C++?
Предположим, у нас есть: char* a; int i; Многие вводные сведения о C++ (например, этот ) предполагает, что rvalue a+i и &a[i] взаимозаменяемы. Я наивно верил в это несколько десятилетий, пока недавно не наткнулся на следующий...
597 просмотров
schedule 25.02.2023

доступ к многомерному массиву C через синтаксис массива против арифметики указателя
Я снова погружаюсь в C через несколько лет. Я думал, что следующие два оператора печати будут иметь одинаковый результат на основе другие ответы я нашел; однако, похоже, это не так. int main() { int** arr = malloc( 3 *...
34 просмотров
schedule 27.03.2022