定义指针C编程的括号

时间:2013-11-22 22:43:24

标签: c parentheses

我是C编程的新手,我查看了以下代码:

struct iphdr *iph = (struct iphdr *)Buffer;

表达是什么意思?

这是代码http://www.binarytides.com/packet-sniffer-code-c-linux/

的链接

2 个答案:

答案 0 :(得分:2)

它将buffer强制转换为指向struct iphdr的指针,然后将iph初始化为该指针。这是因为buffer是指向原始字节缓冲区的指针,但在此函数中,已知缓冲区中存储的字节遵循struct iphdr的格式。因此struct iphdr可以用来访问缓冲区的内容,而不必解释和操作原始字节。

编辑:澄清(根据评论):演员不会复制或转换任何内容。它基本上只是告诉编译器“我知道buffer应该包含unsigned char但是在这个特定时间这些字节实际上是struct iphdr所以让我通过指针访问它们{ {1}}以更方便的方式“。

答案 1 :(得分:0)

buffer是指向用于存储原始数据包数据的unsigned char数组的指针。

这会重新将buffer的类型重新理解为指向struct iphdr的指针,因此您可以将其指定给iph并将其作为结构读取。从技术上讲,这只会压制编译器错误,因为它们是buffer,因为它们是不同类型的,所以iph的值不同,尽管它们都是指针。

或者,您可以改为buffer类型void*

指向void的指针可以分配给任何其他指针类型,而无需重新设置它的类型:

void* buffer = malloc(65536);
...
void ProcessPacket(void* buffer, int size) {
    struct iphdr *iph = buffer;
    ...
}