指向数组的指针和c中的二维数组

时间:2016-05-17 07:37:19

标签: c arrays pointers

struct packet_event *packet_event_p[8];

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

它与以下不同:

struct packet_event **packet_event_p;

如果是,我怎么能用这个指针?

3 个答案:

答案 0 :(得分:1)

第一个:

struct packet_event *packet_event_p[8];

代表将packet_event_p声明为一个包含8个指向struct 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

希望这有用。

答案 1 :(得分: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

答案 2 :(得分:0)

确实,数组可以衰减为指针,但它们并不相同。

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

通常当您将此类型作为函数参数传递时,您还将添加数组的大小,或使用外部已知变量来标记其长度。通常,函数声明将是指针而不是数组类型。我认为即使编译器自动执行(关于它的注释也会有用)

使用sizeof运算符可以看到这些类型之间的一种不同。当应用于已知为数组类型的变量时,结果是数组的整个大小。否则它将是指针的大小,可能是4字节或8字节(取决于它是否为64 / 32bit机器)。