【发布时间】:2019-09-16 21:23:39
【问题描述】:
作为练习,我试图用一个以 void 指针作为参数的函数交换变量内容。 我不明白为什么它总是为第一个变量返回一个随机值。
#include <stdio.h>
#include <string.h>
void swap(void* vp1, void* vp2, int size)
{
char buffer[size];
memcpy(buffer, vp1, size);
memcpy(vp1, vp2, size);
memcpy(vp2, buffer, size);
}
void main()
{
int g1 = 243;
int g2 = 28;
printf("g1 before swap = %i\n", g1);
printf("g2 before swap = %i\n", g2);
printf("&g1 = %p\n", &g1);
printf("&g2 = %p\n", &g2);
swap(&g1, &g2, sizeof(int*));
printf("-------------------------\n");
printf("g1 after swap = %i\n", g1);
printf("g2 after swap = %i\n", g2);
printf("&g1 = %p\n", &g1);
printf("&g2 = %p\n", &g2);
}
./swap
g1 before swap = 243
g2 before swap = 28
&g1 = 0x7ffee832072c
&g2 = 0x7ffee8320728
-------------------------
g1 after swap = -399374528
g2 after swap = 243
&g1 = 0x7ffee832072c
&g2 = 0x7ffee8320728
示例直接取自this course,虽然很有趣
【问题讨论】:
-
你可能想要
sizeof(int)而不是sizeof(int *)。 -
谢谢,就是这样:)
-
Tipp:而不是
sizeof(TYPE),更喜欢使用sizeof(EXPRESSION),例如在你的情况下sizeof(g1). -
如果你想练习防御性编码,请输入
assert(sizeof(g1) == sizeof(g2))... -
它是
sizeof EXPRESSION,因为sizeof是一个运算符,而不是一个函数。