开发者

Pointer to int. C++

I need to pass to function pointer to int. Now if I want to pass 5 I'm doing it like this:

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

Is there any better way to write it shorter?

I want to pass bytes that are in i int to this funct开发者_运维问答ion:

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


You can just pass &b to the function; no need for an intermediate pointer variable.


Why to create a pointer variable?. Why can't you do it like this?.

int b = 5;
func(&b)


void f(int *i)
{
  //...
}

int b = 5;
f(&b);

is enough!


There are a few old C APIs that always take arguments by pointer, even if they're effectively read-only booleans etc.. I'm not recommending it - more for interest's sake - but if you want to go the whole hog you could do something hackish like:

#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";
}

Crucially, the temporaries are valid until after the function call f(...) exits.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜