Chào mọi người, em là newbie :))
Hôm nay, trong lúc ngồi cào phím thì em có viết một cái hàm : void exch(void*, void*) để đổi giá trị cho 2 biến truyền vào. Dưới đây là chương trình em đã viết riêng ra để test cho dễ theo dõi.
#include<stdlib.h>
#include<stdio.h>
void exch(void *i, void *j, size_t size)
{
void *k;
k = *(void**)i;
*(void**)i = *(void**)j;
*(void**)j = k;
}
int main()
{
int *i, *j;
i = (int*)calloc(6, sizeof(int));
*i = 1;
*(i+1) = 2;
*(i+2) = 3;
*(i+3) = 100;
*(i+4) = 200;
*(i+5) = 300;
exch(i, i+3, sizeof(int));
printf("a : %d-%d-%d, b : %d-%d-%d\n", *i, *(i+1), *(i+2), *(i+3), *(i+4), *(i+5));
return 0;
}
Kết quả in ra : a : 100 200 3, b : 1, 2, 300
Mục đích của hàm em viết là để đổi giá trị của i và i+3 thôi. Nhưng em không hiểu tại sao hàm luôn hoán đổi thêm một giá trị đằng sau, tức là đổi luôn i+1 với i+4 . Em chạy chương trình bằng gcc trên Ubuntu ạ.
Mong các bác giải thích giúp em.
dùng stack space nếu size nhỏ.
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?