Форум программистов, компьютерный форум CyberForum.ru

Сложение указателей - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как написать программу с функцией http://www.cyberforum.ru/cpp-beginners/thread562919.html
Короче, у меня есть программа, как написать её с функцией?#include <iostream> #include <math.h> #include <stdio.h> #include <conio.h> using namespace std; int main() { int A,NB,NA,i,j,G; float B,R,f; NA=0;
C++ Преобразование символов в числа Помогите пожалуйста написать программу. Дан текст, имеющий вид: d1\pm d2\pm...\pm dn, где di-цифры.Вычислить значение данного выражения. http://www.cyberforum.ru/cpp-beginners/thread562914.html
В строке имеются только две одинаковые буквы. Найти их. C++
помогите пожалуйста написать программу!!! В строке имеются только две одинаковые буквы.Найти их.
Нерекурсивные функции (сумма делителей для натурального числа) C++
Разработать функцию, которая для заданного натурального числа N возвращает сумму его делителей. С помощью данной функции: вывести на экран только те целые числа отрезка , у которых сумма делителей равна заданному числу.
C++ Стандарты оформления кода http://www.cyberforum.ru/cpp-beginners/thread562909.html
Здравствуйте. Где можно доходчиво прочесть по стандартам оформления кода? Желательно на русском. Ибо часто вижу, допустим, такое: GetValue getValue MyClass CMyClass char str char Str char cStr
C++ Функции-шаблоны Помогите пожалуйста наисать программу!! Для работы с двумерными массивами арифметических типов данных разработать шаблоны ввода и вывода массива, а также шаблон для решения основной задачи: заменить все минимальные элементы протипоположными по значению. подробнее

Показать сообщение отдельно
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
01.05.2012, 19:15     Сложение указателей
вы ассемблерный код то хотябы видели?
у вас там две арифметические операции с указателями. значит будет один промежуточный результат, его нужно в регистрах хранить что-то делать с этим всем. + не забыть учесть, что в арифметике указателей еще неявно учавствует размер. т.е. возможно там еще и умножение в каждой операции будет
Вот какой ассемблер у меня получился в дебаге:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
  int* p1 = b ? left : right;
0041332E  movzx       eax,byte ptr [b] 
00413332  test        eax,eax 
00413334  je          F1+31h (413341h) 
00413336  mov         ecx,dword ptr [left] 
00413339  mov         dword ptr [ebp-0DCh],ecx 
0041333F  jmp         F1+3Ah (41334Ah) 
00413341  mov         edx,dword ptr [right] 
00413344  mov         dword ptr [ebp-0DCh],edx 
0041334A  mov         eax,dword ptr [ebp-0DCh] 
00413350  mov         dword ptr [p1],eax 
  int* p2 = b ? right : left;
00413353  movzx       eax,byte ptr [b] 
00413357  test        eax,eax 
00413359  je          F1+56h (413366h) 
0041335B  mov         ecx,dword ptr [right] 
0041335E  mov         dword ptr [ebp-0DCh],ecx 
00413364  jmp         F1+5Fh (41336Fh) 
00413366  mov         edx,dword ptr [left] 
00413369  mov         dword ptr [ebp-0DCh],edx 
0041336F  mov         eax,dword ptr [ebp-0DCh] 
00413375  mov         dword ptr [p2],eax 
*/
void F1(bool b, int* left, int* right)
{
  int* p1 = b ? left : right;
  int* p2 = b ? right : left;
}
 
/*
  int* p1 = b ? left : right;
00412E5C  movzx       eax,byte ptr [b] 
00412E60  test        eax,eax 
00412E62  je          F2+3Fh (412E6Fh) 
00412E64  mov         ecx,dword ptr [left] 
00412E67  mov         dword ptr [ebp-0F4h],ecx 
00412E6D  jmp         F2+48h (412E78h) 
00412E6F  mov         edx,dword ptr [right] 
00412E72  mov         dword ptr [ebp-0F4h],edx 
00412E78  mov         eax,dword ptr [ebp-0F4h] 
00412E7E  mov         dword ptr [p1],eax 
  int* p2 = left + x - y;
00412E81  mov         eax,dword ptr [x] 
00412E84  mov         ecx,dword ptr [left] 
00412E87  lea         edx,[ecx+eax*4] 
00412E8A  mov         eax,dword ptr [y] 
00412E8D  shl         eax,2 
00412E90  sub         edx,eax 
00412E92  mov         dword ptr [p2],edx 
*/
void F2(bool b, int* left, int* right)
{
  int x = 10;
  int y = 20;
  int* p1 = b ? left : right;
  int* p2 = left + x - y;
}
 
 
/*
  int* p1 = right;
0041277E  mov         eax,dword ptr [right] 
00412781  mov         dword ptr [p1],eax 
  int* p2 = left;
00412784  mov         eax,dword ptr [left] 
00412787  mov         dword ptr [p2],eax 
  if (b)
0041278A  movzx       eax,byte ptr [b] 
0041278E  test        eax,eax 
00412790  je          F3+3Eh (41279Eh) 
  {
    p1 = right;
00412792  mov         eax,dword ptr [right] 
00412795  mov         dword ptr [p1],eax 
    p2 = left;
00412798  mov         eax,dword ptr [left] 
0041279B  mov         dword ptr [p2],eax 
  }
*/
void F3(bool b, int* left, int* right)
{
  int* p1 = right;
  int* p2 = left;
  if (b)
  {
    p1 = right;
    p2 = left;
  }
}

Если вы специалист - считайте такты. Кстати, ваш код даже не компилируется в студии.
 
Текущее время: 18:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru