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

55
голосов
5
ответов
#include<stdio.h> struct test{ int a; int b; }m; int main() { m.a=5;m.b=7; struct test *p; p = &m; printf("p[0] = %d\n",*(p+0)); printf("p[1] = %d\n",*(p+1)); return 0; } Я получаю следую...
4 месяца назад s.j
104
голоса
3
ответа
Я просматриваю список узлов, которые имеют два поля: следующий и размер. В коде появляется точка, в которой мне нужно связать новый узел, и у меня возникают проблемы. Я нашел, где код seg неисправе...
4 месяца назад user1874239
-8
голосов
1
ответ
Я новичок в программировании на C и пытаюсь понять, как работает арифметика указателя. Нижеприведенный оператор printf печатает 2, когда аргументы для printf равны * (p + 2) и 4, для * p. Не могли ...
4 месяца назад DriggyBoy
88
голосов
1
ответ
Следующая проблема: у меня есть программа С#, которая делает некоторое дешифрование на очень низком уровне. Я использовал инструмент, чтобы преобразовать большую часть кода С# в Java, который работ...
4 месяца назад trixn
220
голосов
2
ответа
Для вычитания указателей i и j элементам одного и того же объекта массива примечание в [expr.add # 5] гласит: [Примечание. Если значение i-j не находится в диапазоне представляемых значений типа st...
4 месяца назад jotik
55
голосов
4
ответа
Я программирую msp430 с IAR EBW. Я получил выражение следующим образом: adres = (uint_fast16_t *) 0x8602 + (0x0200*i); в цикле for, так что я увеличивается с каждым циклом. По какой-то причине он п...
4 месяца назад maciejko'
69
голосов
3
ответа
Прямо сейчас у меня есть код, который указывает на арифметику указателя, как это var1 + sizeof(structA) Var1 является указателем, а structA - структурой с размером sizeOf 4 байта. Проблема в том, ч...
4 месяца назад Mo Jo
79
голосов
4
ответа
Я пытаюсь встать на C и написал эту программу, которая отображает kb моей ОЗУ в случайном месте. Вот код, и он отлично работает: #include <stdio.h> int main(){ char *mem; for(int i =0; i <...
4 месяца, 1 неделя назад Loupax
68
голосов
4
ответа
int main(){ int array[] = [10,20,30,40,50] ; printf("%d\n",-2[array -2]); return 0 ; } Кто-нибудь может объяснить, как -2 [массив -2] работает и почему [] здесь используется? Это был вопрос в моем ...
4 месяца, 1 неделя назад user8635555
67
голосов
1
ответ
У меня есть динамически выделенный 2d-массив и я хотел бы пропустить его с помощью арифметики указателя, потому что я не буду знать количество строк и количество столбцов до времени выполнения. Я з...
4 месяца, 1 неделя назад jason adams
68
голосов
3
ответа
#include<stdio.h> main() { int a[]={0,2,4,6,8}; int *ptr; ptr=a; printf("%d", *((char*)ptr+4)); } *((char*)ptr+4)) Какова цель этого?
4 месяца, 1 неделя назад dpaksp
77
голосов
2
ответа
У меня есть структура данных struct foo , которая всегда появляется в парах. Прямо сейчас, каждый struct foo переносит указатель на другой struct foo в своей паре: struct foo { struct foo *other_ha...
4 месяца, 1 неделя назад fuz
108
голосов
5
ответов
У меня очень странный пример указателей, который требует вашей любезной помощи. В общем, указатели используются для указания на переменную (см. Первый пример ниже), но когда он указывает на массив....
4 месяца, 1 неделя назад el psy Congroo
-6
голосов
1
ответ
Я пытаюсь построить стек, используя динамическую память и арифметику указателя, чтобы перемещаться по стеку. Я получаю ошибки, которые я, похоже, не могу решить. Ошибки варьируются в зависимости от...
4 месяца, 1 неделя назад Kyle Widmann
87
голосов
1
ответ
Примитивы диапазона, предназначенные для встроенных массивов, потребляют их источники, но можно легко разработать систему дальности, которая скорее основывалась бы на .ptr источника (сначала выгляд...
4 месяца, 1 неделя назад Abstract type
55
голосов
2
ответа
На языке, описанном в ISO 9899: 2011 (то есть, C11), при этом T является полным типом данных и декларацией struct { T a, b; } s; могу ли я предположить, что &s.a + 1 == &s.b ? Изменена ли с...
4 месяца, 1 неделя назад fuz
79
голосов
4
ответа
Я наткнулся на код whoes output, который я не могу понять. Код - int main() { int a[] = {1, 2, 3, 4, 5, 6}; int *ptr = (int*)(&a+1); printf("%d ", *(ptr-1) ); return 0; } Выход выше кода выходи...
4 месяца, 1 неделя назад Raghav Sharma
109
голосов
1
ответ
Я пытаюсь передать данные в MPI_Gather . Я выделяю память следующим образом: float *phie, *phitemp; MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); phitemp=(floa...
4 месяца, 1 неделя назад Marta
87
голосов
1
ответ
В архитектуре, совместимой с AMD64, адреса должны быть в канонической форме до разыменования. Из руководства Intel, раздел 3.3.7.1 : В 64-битном режиме адрес считается в канонической форме, если адр
4 месяца, 2 недели назад Banex
68
голосов
3
ответа
В настоящее время я работаю над проектом, который требует преобразования некоторого кода C++ в среду С#. По большей части, это на самом деле довольно просто, но в настоящее время я преобразовываю н...
4 месяца, 2 недели назад kromenak
-6
голосов
3
ответа
Мне нужна функция для удаления ) символа из конца строки. например, hello,world) должны быть преобразованы в hello,world . Я написал это: char *a="hello,world)"; int a_len=strlen(a); *(a+a_len-1)='...
4 месяца, 2 недели назад alireza_fn
67
голосов
2
ответа
При компиляции для 64-битного кода сбой при нарушении доступа при доступе к ptr[1-offset] : char* ptr = new char[4]; strcpy(ptr, "bar"); unsigned int offset = 2; ptr+=offset; char test0 = (ptr-offs...
4 месяца, 2 недели назад Kaiserludi
55
голосов
1
ответ
В такой функции: char nextchr (void* p) { ((char*)p)++; return *(((char*)p)); } Это должно возвращать второй символ строкового литерала, переданного как аргумент p, просто не может этого сделать. П...
4 месяца, 2 недели назад Imobilis
54
голоса
1
ответ
У меня есть следующий вопрос: Если a является массивом int с 10 элементами, я могу определить указатели int*b=&a[3]; int*c=&[2]; Затем я могу выполнить арифметические операции с этими указа...
4 месяца, 2 недели назад fibo11235
-4
голоса
1
ответ
Я знаю, что вычитание указателей определенного типа данных должно возвращать количество элементов (с этим конкретным типом данных), которое будет размещаться как целое внутри памяти между указателя...
4 месяца, 2 недели назад piko
68
голосов
1
ответ
В настоящее время я работаю над программой для решения красно-синих вычислений; программа написана на C. Описание проблемы находится здесь: http://www.cs.utah.edu/~mhall/cs4961f10/CS4961-L9.pdf tl;...
4 месяца, 2 недели назад user2930002
68
голосов
1
ответ
У меня есть эта функция, которая печатает каждый символ внутри символа char *, используя нотацию массива: void printCharArray(char* c,int n) { for(int i=n-1;i>=0;i--) cout << c[i]; // or *...
4 месяца, 2 недели назад Shiba Tatsuiya
55
голосов
6
ответов
Я хочу взять некоторые поля из структуры пакетов, используя арифметику указателя. Но что не так с кодом ниже? В первом условии я думаю, что если я иду 4 байта (2 коротких поля) с начала пакета, я п...
4 месяца, 2 недели назад Qxtrml
118
голосов
1
ответ
Рассмотрим этот пример кода: 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; } }; В
4 месяца, 2 недели назад Oliv
-7
голосов
1
ответ
Я пытаюсь сделать следующее: char c[] = "programming"; char *p; *(c-1)='l'; *(c-2)='l'; *(c-3)='l'; *(c-4)='l'; *(c-5)='l'; p=&c[0]; cout<<*(c-1); Это печатает l только, если я опускаю p=...
4 месяца, 2 недели назад user3541689
-4
голоса
1
ответ
Предположим, что у вас есть переменная int num и указатель int* cell . Имеет ли значение значения, сохраненные в cell и num для записи cell = &num или *cell = num ?
4 месяца, 2 недели назад FizzleDizzle
55
голосов
1
ответ
У меня есть эта функция, которую я пытаюсь преобразовать, но я просто не могу понять, что происходит в некоторых частях кода. Может кто-нибудь, пожалуйста, помогите мне и объясните код. Я просто хо...
4 месяца, 3 недели назад Michael
56
голосов
2
ответа
Я натолкнулся на странный результат, когда я возился с указателями в C++. Не совсем уверен, что это даст тот же результат для других компиляторов, но я попытался использовать GCC 5.1.0, 4.8.1, и ре...
4 месяца, 3 недели назад Abrahamyan Samvel
77
голосов
3
ответа
Я новичок в мире программирования C, и на данный момент я изучаю комбинацию указателей, арифметику указателей с файловым IO и управлением памятью. Пожалуйста, найдите мой код ниже, и вот что я пыта...
4 месяца, 3 недели назад Ody
69
голосов
3
ответа
У меня возникли проблемы с пониманием того, какая разница между этими двумя фрагментами кода: // out is of type char* of size N*D // N, D are of type int for (int i=0; i!=N; i++){ if (i % 1000 == 0...
4 месяца, 3 недели назад soramimo
56
голосов
1
ответ
*(*(p+a)+b) Если размер * добавлен к адресу (p), то почему размер b * добавлен в * (p + a)? * (p + a) представляется значением в этом месте, и добавление к нему размера b * изменит его значение, а ...
4 месяца, 4 недели назад user490735
78
голосов
4
ответа
Возьмите int ptr={10,20,30,40,50} Я понимаю, что print("%d", *ptr++); в такой постановке оценка операторов справа налево. Следовательно, в *ptr++ сначала оценивается ++ , а затем ptr , а затем * Ит...
4 месяца, 4 недели назад Registered User
55
голосов
2
ответа
Если у меня есть большой массив, где потоки данных чередуются сложным образом, могу ли я определить указатель p такой, что p + 1 - это произвольное смещение b байтов. Например, скажем, у меня 1 000...
5 месяцев назад TallBrianL
67
голосов
3
ответа
Когда я узнал об pointer arithmetic я нашел следующий код: #include <stdio.h> int main() { int *p, *q, *r, a, b; p = &a; q = &b; p = p-q; r = &a; r = (int*)(r-q); printf("p = %p\n...
5 месяцев назад Akhil
-9
голосов
1
ответ
Я нашел очень интересное явление в арифметике указателя. Я использую Microsoft Visual Studio 2015 У меня есть следующая программа #include<iostream> using namespace std; void testFunction2(co...
5 месяцев назад william
Чтобы , пожалуйста,
Выберите тему жалобы:

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