【发布时间】:2018-03-04 23:35:13
【问题描述】:
我不太明白这段代码是如何工作的:
#include <stdio.h>
void gswap(void* ptra, void* ptrb, int size)
{
char temp;
char *pa = (char*)ptra;
char *pb = (char*)ptrb;
for (int i = 0 ; i < size ; i++) {
temp = pa[i];
pa[i] = pb[i];
pb[i] = temp;
}
}
int main()
{
int a=1, b=5;
gswap(&a, &b, sizeof(int));
printf("%d , %d", a, b)
}
我的理解是 char 在内存中有 1 个字节(大小),我们使用指针来交换 int 值的每个字节(4 个字节)。
但最后,怎么可能解引用一个指向 int 值的 char 指针呢?
【问题讨论】:
-
gswap没有取消引用int值,它只是逐字节交换int的位模式。转换为char*是一种用于获取对象的单个字节的技巧。 -
@Pablo 不会使用
stdint.h并转换为uint8_t*更具可读性,也许吧? -
@BernardoMeurer
uint8_t会增加清晰度,unsigned char也会如此。然而并不是真的需要。注意uint8_t是一个可选类型,虽然很常见。 -
@chux 是的,我的意思主要是为了清楚起见,我从不喜欢使用 char 来表示字节:P
标签: c pointers char void-pointers char-pointer