Swapping objects using pointers

后端 未结 10 1316
轻奢々
轻奢々 2020-12-03 18:20

I\'m trying to swap objects for a homework problem that uses void pointers to swap objects. The declaration of my function has to be:

void swap(void *a, voi         


        
相关标签:
10条回答
  • 2020-12-03 18:42

    If you were writing a function to swap two integers, given pointers to them, your solution of swapping the values pointed to would work. However, consider the situation with

    struct {
      int a;
      int b;
    } a, b;
    
    swap(&a, &b, sizeof(a));
    

    You need to figure out a way to swap the contents of each value passed without any knowledge of what they actually consist of.

    0 讨论(0)
  • We need not use memcpy for swapping two pointers, following code works well(tested for swapping int* and char* strings):

    void swap(void **p, void **q)
    {
        void *t = *p;
        *p = *q;
        *q = t;
    }
    
    0 讨论(0)
  • 2020-12-03 18:47

    I had a question similar to this for my C course. I think memcopy is probably best but you can also try this:

        typedef unsigned char * ucp;
    
        void swap(void *a, void *b, int size){
          ucp c=(ucp)a;
          ucp d=(ucp)b;
          for(int i=0; i<size; i++){
            int temp=(int)c[i];
        c[i]=(int)d[i];
        d[i]=temp;
          }
    
        }
    

    Basically what this does is cast both pointers to an unsigned char pointer type. Then you increment the pointer, which in the case of an unsigned char, increments one BYTE at a time. Then what you're doing is basically copying the contents of each byte at a time in memory. If anyone wants to correct or clarify on this I would appreciate it too.

    0 讨论(0)
  • 2020-12-03 18:48

    First of all, note that any changes to the pointers inside the function won't be propagated to outside the function. So you're going to have to move memory around.

    The easiest way to do that is with memcpy - allocate a buffer on the stack, memcpy the appropriate size from a into it, memcpy from b to a, and one last memcpy from temp into b.

    0 讨论(0)
提交回复
热议问题