Указатель на int. C ++ - PullRequest
       12

Указатель на int. C ++

5 голосов
/ 10 марта 2011

Мне нужно перейти к указателю на функцию int. Теперь, если я хочу пройти 5, я делаю это так:

int * i = NULL;
int b = 5;
i = &b;

Есть ли лучший способ написать его короче?

Я хочу передать байты, находящиеся в i int, этой функции:

void Write2Asm(void* pxAddress, BYTE * MyBytes,  int size)

Ответы [ 4 ]

10 голосов
/ 10 марта 2011

Вы можете просто передать & b в функцию; нет необходимости в промежуточной переменной указателя.

5 голосов
/ 10 марта 2011

Зачем создавать переменную-указатель?Почему ты не можешь сделать это так?

int b = 5;
func(&b)
4 голосов
/ 10 марта 2011
void f(int *i)
{
  //...
}

int b = 5;
f(&b);

достаточно!

0 голосов
/ 10 марта 2011

Есть несколько старых C API, которые всегда принимают аргументы по указателю, даже если они фактически являются логическими значениями только для чтения и т. Д. Я не рекомендую это - больше для интереса - но если вы хотите перейти к целому блин, ты мог бы сделать что-то хакерское вроде:

#include <iostream>

struct X
{
    X(int n) : n_(n) { std::cout << "X()\n"; }
    ~X() { std::cout << "~X()\n"; }
    operator int&() { return n_; }
    operator const int() const { return n_; }
    int* operator&() { return &n_; }
    const int* operator&() const { return &n_; }
    int n_;
};

// for a function that modifies arguments like this you'd typically
// want to use the modified values afterwards, so wouldn't use
// temporaries in the caller, but just to prove this more difficult
// case is also possible and safe...
void f(int* p1, int* p2)
{
    std::cout << "> f(&" << *p1 << ", &" << *p2 << ")\n";
    *p1 += *p2;
    *p2 += *p1;
    std::cout << "< f() &" << *p1 << ", &" << *p2 << "\n";
}

int main()
{
    // usage...
    f(&X(5), &X(7));

    std::cout << "post\n";
}

Важно отметить, что временные значения действительны до тех пор, пока не завершится вызов функции f(...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...