Pointer-Arithmetic – вопросы и ответы

-3
голоса
1
ответ
Я пишу код для пользовательской встроенной платформы, которая запускает powerPC и использует компилятор powerpc-eabi-gcc. Мой код, который вызывает у меня проблемы, следующий: Структуры объявляются...
4 года, 1 месяц назад rolls
-3
голоса
3
ответа
Я изучаю указатели на C. У меня путаница в арифметике указателя. Посмотрите ниже программу: #include<stdio.h> int main() { int a[] = 2,3,4,5,6; int *i=a; printf("value of i = %d\n", i); ( *ju...
4 года, 11 месяцев назад Yogesh Tripathi
48
голосов
5
ответов
Вот мой код, который работает. Функция инициализирует массив, a, значения 0 - 3 int main(void) { int a[4]; pointer(a); return 0; } void pointer(int* a) { int *p, i; p = a; for(i = 0; i < 4; i++)...
6 лет назад user1695758
82
голоса
4
ответа
Поскольку арифметика указателей определена в том же массиве, я сомневаюсь, что мы можем вычесть NULL из другого NULL . Я обеспокоен реализацией: //first and second can both either be from the same ...
9 месяцев, 1 неделя назад St.Antario
58
голосов
2
ответа
Я работаю над присвоением Uni здесь, и у меня возникла проблема. Я пытаюсь сохранить ввод строки в точке внутри структуры, используя for-loop. Позже я намереваюсь использовать указатель на том мест...
6 лет, 4 месяца назад Henrik Hillestad Løvold
89
голосов
2
ответа
Я пытаюсь выполнить поиск в блоке памяти для 4-байтового шестнадцатеричного значения (0xAABBAABB), а затем скопировать 4 байта до этого в отдельную переменную. 0xAABBAABB - это терминатор сообщения...
3 года, 6 месяцев назад moonraker
58
голосов
3
ответа
Выделил 50*sizeof(int) динамической памяти с помощью malloc . Когда я читаю в каком-то документе, сразу ниже элемент должен быть размером выделенной памяти с помощью malloc (в моем случае это 200 б...
3 года, 3 месяца назад Vijay S B
126
голосов
4
ответа
Я совсем недавно работаю с С++ и не понял всех тонкостей и тонкостей языка. Какой самый портативный, правильный и безопасный способ добавить произвольное смещение байта в указатель любого типа в С+...
6 лет, 9 месяцев назад Virtlink
58
голосов
2
ответа
Для заданного типа исходного указателя в C++, T* ptr , каков список всех операторов, определенных на нем?
4 года, 3 месяца назад Vincent
90
голосов
2
ответа
Независимо от того, какое значение я установил для размера моего массива, функция, которую я написал, возвращает значение на несколько градусов больше. Я попытался, в то время как (* str++) и удаля...
8 месяцев, 4 недели назад KKyle
-3
голоса
3
ответа
Таким образом, у меня есть указатель на массив парных чисел, мне нужно сделать, чтобы мы указали арифметику, чтобы перейти к следующему месту в массиве, однако я не могу найти подходящую документац...
6 лет, 10 месяцев назад Edmund Rojas
104
голоса
1
ответ
Я хочу выполнить проверку выравнивания памяти некоторого типа T . Прямой способ сделать это - if (((uintptr_t)&var & __alignof(T) - 1) == 0) ... однако uintptr_t не является частью существу...
8 лет, 11 месяцев назад ledokol
48
голосов
2
ответа
После небольшого программирования на C я решил перейти прямо на С++. Сначала я был доволен наличием класса строк и возможностью рассматривать строки как целые единицы, а не массивы символов. Но вск...
8 лет, 11 месяцев назад Steve S
83
голоса
3
ответа
Меня учили, что компилятор преобразует имя массива в указатель на первый элемент массива всякий раз, когда это необходимо. Так что я использовал это правило для решения многих проблем, и все было х...
9 месяцев, 1 неделя назад Avi
47
голосов
6
ответов
Я написал следующий код: #include <iostream> using namespace std; int main() { int a[10][10]; for (int i = 0; i < 10; i++) for (int j = 0; j < 10; j++) a[i][j] = i * j; cout << *(...
6 лет, 1 месяц назад elyashiv
67
голосов
4
ответа
Рассмотрим следующую программу: (см. живое демо здесь ) #include <stdio.h> int main(void) { char c[]={'s','h','r','e','y','a','\0'}; char *ptr=c; for(int i=0;i<6;i++) printf("%c",ptr[i]); ...
4 года, 5 месяцев назад Destructor
-5
голосов
1
ответ
Полагаю, я грубо понял, что делают указатели, но я не понимаю, что делает указатель * (x + i). Так, например, * (x + 1). Указывает ли оно на x и увеличивает его значение на 1 или что? Также я нашел...
2 года, 8 месяцев назад Mimi
200
голосов
5
ответов
Рассмотрим следующий код: int* p1 = new int[100]; int* p2 = new int[100]; const ptrdiff_t ptrDiff = p1 - p2; int* p1_42 = &(p1[42]); int* p2_42 = p1_42 + ptrDiff; Теперь, гарантирует ли Стандар...
12 месяцев назад Sergey
48
голосов
1
ответ
У меня есть код вроде while (n--) { *((char*)dest++) = *((char*)src++); } где dest и src - указатели void и n размер. Целью является повторная реализация функции memcpy. При компиляции этого кода с...
5 лет, 4 месяца назад Thüzhen
116
голосов
2
ответа
Я знаю, что это правда: x[4] == 4[x] Что такое эквивалент для многомерных массивов? Является ли следующее верно? x[4][3] == 3[x[4]] == 3[4[x]]
8 лет, 2 месяца назад ypercubeᵀᴹ
68
голосов
4
ответа
На тесте, который я недавно получил, у него возник вопрос о том, "если этот код скомпилируется, что он будет делать?" Код: int *ptr ptr = (int *) malloc( 25 * sizeof(int)); //100 bytes *ptr = 'x'; ...
3 года, 1 месяц назад Tcpowers
59
голосов
3
ответа
Я встретил слишком странное поведение арифметики указателя. Я разрабатываю программу для разработки SD-карты из LPC2148 с использованием инструментальной линейки ARM GNU (в Linux). На моей SD-карте...
5 лет, 11 месяцев назад user3258584
118
голосов
1
ответ
Учитывая, что вы можете (не можете придумать отличный способ выразить это, но) манипулировать указателями в golang, возможно ли выполнить арифметику указателя в golang, как в C, скажем, для итераци...
4 года, 4 месяца назад user4910881
48
голосов
1
ответ
Я должен написать функцию в C на Linux для чтения или записи родовых данных. Я могу читать (или писать) большие данные, поэтому я сделал некоторое время, используя количество байтов, которые я чита...
3 года, 8 месяцев назад SimC
66
голосов
1
ответ
Я знаю об этом вопросе и этом вопросе . Элемент новизны в этом сосредоточен на Xcode и в его использовании квадратных скобок для разыменования указателя на void. Следу
7 лет назад damix911
67
голосов
3
ответа
#include <stdio.h> #include <stdlib.h> #include <string.h> int string_cmp(const void *p, const void *q); int main(int argc, char **argv) { int i; // variable char **words_array = ...
3 года, 9 месяцев назад EnglishStudent62
49
голосов
1
ответ
Я пытаюсь использовать char * для хранения строки, и, поскольку указатель указывает на ячейку памяти первого char данной строки, я попытался использовать арифметику указателей ( ptr++ ), чтобы пере...
1 год, 2 месяца назад Stelios Papamichail
48
голосов
7
ответов
В следующих строках кода мне нужно настроить указатель pm на смещение в байтах в одном из полей. Есть ли лучший/более простой способ сделать это, чем непрерывное отбрасывание назад и вперед от char...
10 лет, 3 месяца назад Matt Joiner
147
голосов
6
ответов
Следующая программа С++ 11: int x = 42; void f() { int y = 43; static_assert(&x < &y, "foo"); } int main() { f(); } Не компилируется с gcc 4.7, поскольку он жалуется: error: ‘&y’ is ...
6 лет, 5 месяцев назад Andrew Tomazos
75
голосов
2
ответа
Проблема в том, что, хотя я увеличиваю указатель каждый раз, когда вызывается функция addnums, массив addednums содержит только один символ, последний из которых был рассчитан. Почему это происходи...
2 года, 8 месяцев назад ADR
75
голосов
1
ответ
Мой вопрос заключается в динамическом распределении памяти и арифметике указателя. У меня есть функция, которая вызывается в основной функции, и она должна заполнять массив n longs и динамически за...
1 год, 1 месяц назад tribo32
77
голосов
1
ответ
Представьте код следующим образом: void some_scope() { int OriginPointer[SOME_GIVEN_AMOUNT]; int *ActingPointer; ActingPointer = OriginPointer; while ((ActingPointer - OriginPointer) < SOME_GIVE...
4 года, 5 месяцев назад dhein
48
голосов
1
ответ
Рассмотрим следующий код: static void Main(string[] args) { int max = 1024; var lst = new List<int>(); for (int i = 1; i <= max; i *= 2) { lst.Add(i); } var arr = lst.ToArray(); IterateInt...
6 лет, 1 месяц назад Mike Perrenoud
47
голосов
3
ответа
Просто, когда я расслабился, у меня было хорошее понимание указателей в контексте массивов, я снова упал лицом вниз по этой следующей программе. Я понял, как для массива arr , arr и &arr одинак...
6 лет, 8 месяцев назад Rüppell's Vulture
-3
голоса
2
ответа
Рассмотрим ниже фрагмент кода: int *p; /* Lets say p points to address 100 and sizeof(int) is 4 bytes. */ int *q = p+1; unsigned long r = q-p; /* r results in 1, hence for r = q-p something is happ...
1 год, 1 месяц назад user8070445
60
голосов
2
ответа
У меня есть этот пример в книге: #define ALLOCSIZE 10000 /* size of available space */ static char allocbuf[ALLOCSIZE]; /* storage for alloc */ static char *allocp = allocbuf; /* next free position...
3 года, 6 месяцев назад Yahya
76
голосов
2
ответа
У меня есть следующая функция, которая печатает матрицу: void printMat(int* mat, int size) { int i; for (i=0 ; i < size ; i++) printf("%d ", mat[i]); printf("\n"); } Предположим, что у меня есть...
1 год, 4 месяца назад DonaldT
48
голосов
3
ответа
У меня есть следующие классы: class A { }; class B : public A { int num; }; в основном у меня есть: int main() { A* vec; // A is a class with pure virtual functions vec = new B[2]; // want to creat...
6 лет, 8 месяцев назад Alon Shmiel
76
голосов
1
ответ
Я думал, что понял арифметику указателей и указателей, но потом я наткнулся на что-то неожиданное. Когда я запускаю этот код, я думал, что увижу в заголовке "(header + 1) - header = 32". Но я этого...
2 года назад Khan9797
116
голосов
3
ответа
Я пишу и читаю регистры с карты памяти, например: //READ return *((volatile uint32_t *) ( map + offset )); //WRITE *((volatile uint32_t *) ( map + offset )) = value; Однако компилятор дает мне след...
5 лет, 2 месяца назад user1876942
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема