Ошибка GCC: недопустимые операнды в двоичный + - PullRequest
2 голосов
/ 20 декабря 2011

Почему GCC выдаёт мне эту ошибку?Что я тут не так делаю?

 temp.c: In function main:
 temp.c:6: error: invalid operands to binary +

Код:

 main()
 {
     char *Address1,*Address2,*NewAddress;
     Address1= (char*)0x12;
     Address2= (char*)0x34;
     NewAddress = Address1+Address2;
 }

Ответы [ 5 ]

5 голосов
/ 20 декабря 2011

Почему вы хотите это сделать?

Язык C запрещает добавление двух указателей . Он только определяет (с серьезными ограничениями) добавление указателя и целого числа.

По сути, вы можете добавить к указателю только целое число, достаточно маленькое, чтобы результат находился внутри или на конечной границе некоторой выделенной зоны памяти.

4 голосов
/ 20 декабря 2011

C не позволяет добавлять два указателя. Лучшее объяснение, которое я нашел для этого, не касаясь какого-либо стандарта, это цитата Рубена Ростамяна:

Если мы с тобой живем на одной улице, разница в нашем доме цифры - это своего рода указатель расстояния между нашими домами.

Теперь, скажи мне, какой смысл в сумме нашего дома? цифры?

Так что вся операция не имеет никакого смысла. Это довольно логично, не правда ли? Вы можете сделать это, однако:

NewAddress = (char *)(0x12 + 0x34);
0 голосов
/ 20 декабря 2011

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

NewAddress = (long)Address1 + Address2;
0 голосов
/ 20 декабря 2011

Поскольку эти переменные являются указателями, попробуйте преобразовать в int.

NewAddress = (char *)((int)Address1 + (int)Address2);
0 голосов
/ 20 декабря 2011

Вы не можете добавлять указатели вместе, это было бы бессмысленно.

Что допускается, так это добавление целых значений к указателям:

char *Address1,*NewAddress;
unsigned Offest;
     Address1= (char*)0x12;
     Offset= 0x34;
     NewAddress = Address1+Offset
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...