需要帮助理解给定代码中的指针

时间:2014-06-21 07:31:12

标签: pointers

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; 

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:0)

括号优先,因此您将它转换为int类型的指针,然后您将检索该指针指向的值(解除引用)并将其复制到d指向的任何位置。

答案 1 :(得分:0)

这整段代码是关于将src中的缓冲区复制到dstwhile循环遍历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倍(因为代码无法检查指针是否对齐)。