2016-05-17 152 views
1
struct packet_event *packet_event_p[8]; 

这是什么意思?它是一个指向具有8个元素的结构数据类型(struct packet_event)的数组的指针吗?我怎么能使用这个指针?

它是从不同:指向数组和二维数组c的指针c

struct packet_event **packet_event_p; 

如果是的话,我怎么会用这个指针?

+3

将packet_event_p声明为结构数组8的指针struct packet_event –

+1

第二个是:将packet_event_p声明为指向struct packet_event指针的指针 –

+0

将[cdecl.org](http://cdecl.org/)添加到您的收藏夹栏。认真。做到这一点。 [第一片段](http://cdecl.ridiculousfish.com/?q=struct+packet_event+*packet_event_p%5B8%5D%3B),[第二片段](http://cdecl.ridiculousfish.com/?q=struct + packet_event + ** packet_event_p%3B)。 – WhozCraig

回答

1

第一个:

struct packet_event *packet_event_p[8]; 

代表 '声明packet_event_p为8个指针数组为结构packet_event'。因此,您创建了8个元素的数组packet_event_p,这些元素是指向struct packet_event的指针。请参阅this link

而第二个:

struct packet_event **packet_event_p; 

代表 '声明packet_event_p作为指针指向struct packet_event'。请参阅this link

希望这是有帮助的。

+0

因此,第一个指针是一个指向具有8个元素的数组的指针? –

+0

@BohaoLI,首先实际上并不是指针本身。它是一个*指针数组*。 –

+2

伯豪利,认为它是这样的'结构packaet_event * foo的[X]'创建指针*(8个球)的*阵列,您可以自由使用,你会任何指针,您可以在阵列符号加以解决(例如'foo [1],foo [2]'等等。struct packet_event ** packet_event_p;'创建一个*指针指针类型struct packet *。它不过是其中的一个。 ,你可以根据你的需要分配数量,如果你需要更多的时候可以分配'realloc'。你在这里分配的每个指针都是一个指向一个新分配的ans类型为'struct packet_event'的内存块的指针,让我知道如果你有q的 –

1

第一个声明:

struct packet_event *packet_event_p[8]; 

限定阵列8元件,其中的每个元素是一个指向struct packet_event的。换句话说,你有一组8指针,每一个指向一个struct packet_event

我怎么能使用这个指针?

您可以为struct packet_event分配内存和您的阵列点的指针设置,就像这样:

struct packet_event *ptr = malloc(sizeof(struct packet_event)); 
if (ptr == NULL) 
    printf ("Error\n"); 
else 
    packet_event_p[0] = ptr; //choose a pointer packet_event_p[0] - packet_event_p[7] 

第二个声明:

struct packet_event **packet_event_p; 

是不同的,因为您声明指针(和不是数组),名为packet_event_p,其指向指向struct packet_event的指针。

如果是,我该如何使用这个指针?

分配内存双指针packet_event_p。请参阅this link为双指针分配内存。

0

确实,数组可以衰减为指针,但它们不一样。

关于它的类型是“指向打包事件的结构的8个指针的数组” 读取C中的类型通常以某种旋风方式进行。要正确地做,您可以阅读这here

通常,当要传递这个类型作为函数参数,也将增加阵列的尺寸,或者使用外部已知的可变标记其长度。通常函数声明将是指针而不是数组类型。我认为,即使是编译器自动完成(有关意见将是有益的)

一个不同的类型之间可以使用sizeof操作中可以看出。当应用于已知为数组类型的变量时,结果就是数组的整个大小。否则它将是一个指针的大小,可能是4字节或8字节(取决于它的64位/ 32位机器)。