Jump to content
  • Advertisement
Sign in to follow this  
tompish

swap pointers question

This topic is 3134 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

How is this not the same thing?? 1. #define SWAP(x0,x) {float * tmp=x0;x0=x;x=tmp;} and 2. void SWAP(float *a, float *b) { float *temp = a; a = b; b = temp; }

Share this post


Link to post
Share on other sites
Advertisement
1 is a macro, 2 is a function.

1 will actually swap the pointers, 2 won't because the pointers are passed by value.

Quick fix for 2, assuming C++:
void SWAP(float *& a, float *& b)

Also, C++ provides a swap function out of the box:
std::swap(a, b);

If that doesn't answer your question, be more specific.

Share this post


Link to post
Share on other sites
Also, notice that the macro version will always have problems with code like this:
  while (a<b) SWAP(a++,b--);

Share this post


Link to post
Share on other sites
Quote:
Original post by alvaro
Also, notice that the macro version will always have problems with code like this:
  while (a<b) SWAP(a++,b--);


That's right! There's absolutely no reason to implement this as a macro. Only bad things will come of it! *scary sounds*

Share this post


Link to post
Share on other sites
haha tx for the help i will use the other option an use the std::swap()

Here is somthing wierd which gave me the worlds biggest headache right now. I am doing a project on stable fluids implemented with c++ and opengl. For my physics part i have a lot of for loops in the solver function and i just could not get my whole program to work. So now i have been sitting with this for 3 straight days and trying to make my code look exactly like the reference i am using.

Here comes the wierd part. The reason i mentioned for loops is that to solve my problem i had to write instead of another loop like this:

for(int i=1; i <= *N; i++){for(int j=1; i <= *N; i++){

I wrote instead:

#define FOR_EACH_CELL for ( i=1 ; i<=*N ; i++ ) { for ( j=1 ; j<=*N ; j++ ) {
#define END_FOR }}

AND IT WORKED!!!!

Now I am wondering WHY?

Share this post


Link to post
Share on other sites
Quote:
Original post by tompish
for(int i=1; i <= *N; i++){for(int j=1; i <= *N; i++){

I wrote instead:

#define FOR_EACH_CELL for ( i=1 ; i<=*N ; i++ ) { for ( j=1 ; j<=*N ; j++ ) {
#define END_FOR }}

AND IT WORKED!!!!

Now I am wondering WHY?

Look carefully and you'll see why. Hint: it has nothing to do with the fact that you're using a macro. ;)

Oh, in C++, arrays start at index 0, just in case you didn't know.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!