FBYTE *d = (FBYTE*) dst;
const FBYTE *s = (const FBYTE*) src;
while(cnt >= sizeof(int)) {
*(int*) d = *(int*) s;
d += sizeof(int);
s += sizeof(int);
cnt -= sizeof(int);
}
我是C编程的新手,我无法理解代码的第4行是如何工作的
*(int*) d = *(int*) s;
任何帮助都将不胜感激。
答案 0 :(得分:0)
括号优先,因此您将它转换为int类型的指针,然后您将检索该指针指向的值(解除引用)并将其复制到d指向的任何位置。
答案 1 :(得分:0)
这整段代码是关于将src
中的缓冲区复制到dst
。 while
循环遍历src
,并在每次迭代中复制一个int
。
让我们来看看第4行的右侧:
s
是指向要复制的源内存区域的指针。(int *)s
)表示将其视为指向int
* (int *)s
)表示取点指向的值。这同样适用于表达式的左侧。
因此,基本上,您在src
缓冲区上进行迭代,并在每次迭代中将当前int
的值复制到dst
。
答案 2 :(得分:0)
d是一个指针。它被声明为一个指向“FBYTE”的指针,无论FBYTE是什么 - 编写这个的程序员需要被打耳机,因为char *或unsigned char *会完成这项工作。
(int *)d是相同的指针,但编译器被告知它是一个指向int的指针。
如果你有一个指针int * p,那么一个赋值 p = 5例如将数字5赋给p指向的int值。这里,(int )d是一个指向int的指针,所以我们也在它前面写了一个*,而*(int *)d =无论是什么赋予这个指针所指向的int“what”。
那么整行做什么:拿指针s。假装它是指向int的指针,而不是指向FBYTE的指针。阅读它指向的int。拿指针d。假装它是指向int的指针,而不是指向FBYTE的指针。将刚刚读取的int写入d指向的int。
不应该写这样的代码。这是一个明显的例子,有人试图聪明和失败。如果要复制数据,请调用memcpy或memmove。他们将数据复制速度提高十倍。在这种情况下,在某些情况下,iPhone上的memcpy可能快1000倍(因为代码无法检查指针是否对齐)。