Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c语言中指向数组和二维数组的指针_C_Arrays_Pointers - Fatal编程技术网

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

c语言中指向数组和二维数组的指针,c,arrays,pointers,C,Arrays,Pointers,这是什么意思?它是指向具有8个元素的结构数据类型(struct packet_event)数组的指针吗?我怎样才能利用这个指针呢 它与: struct packet_event *packet_event_p[8]; 如果是,如何使用此指针?第一个指针: struct packet_event **packet_event_p; 表示“将数据包事件声明为指向结构数据包事件的8个指针数组”。因此,您创建了一个包含8个元素的数组packet\u event\p,这些元素是指向struct pa

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

它与:

struct packet_event *packet_event_p[8];
如果是,如何使用此指针?

第一个指针:

struct packet_event **packet_event_p;
表示“将数据包事件声明为指向结构数据包事件的8个指针数组”。因此,您创建了一个包含8个元素的数组
packet\u event\p
,这些元素是指向struct packet\u事件的指针。请看

鉴于第二个:

struct packet_event *packet_event_p[8];
表示“将数据包事件声明为指向结构数据包事件的指针”。请看


希望这有帮助。

第一个声明:

struct packet_event **packet_event_p;
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]
定义由
8个
元素组成的数组,其中每个元素都是指向
struct packet\u事件的指针。换句话说,您有一个
8
指针数组,每个指针指向一个
struct packet\u事件

我怎样才能利用这个指针呢

您可以为
struct packet\u事件分配内存,并将数组指针设置为指向该事件,如下所示:

struct packet_event *packet_event_p[8];

第二项宣言:

struct packet_event **packet_event_p;
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]
是不同的,因为您声明了名为
packet\u event\u p
指针(而不是数组),该指针指向
struct packet\u event

如果是,如何使用此指针


为双指针
数据包事件\u p
分配内存。有关为双指针分配内存的信息,请参阅。

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

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

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


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

将数据包事件声明为指向结构数据包事件的指针数组8第二个是:将数据包事件声明为指向结构数据包事件的指针添加到收藏夹栏。认真地做吧@WhozCraig这是个不错的主意,你认为了解这些复杂的偏差很重要吗?@BohaoLI你使用C的职业生涯将被大大缩短,除非你能很快理解这样的声明。所以第一个指针是指向一个有8个元素的数组的指针?@BohaoLI,第一个实际上不是指针本身。这是一个指针数组。李伯浩,这样想吧,
struct packaet_event*foo[x]
创建了一个指针数组(8个指针),你可以像使用任何指针一样自由使用,你可以用数组表示法对它们进行寻址(例如
foo[1],foo[2]
以此类推。
struct packet\u event**packet\u event\p;
创建指向struct packet类型指针的指针。它只不过是其中的一个。但是,您可以根据需要分配任意数量的指针。如果以后需要,您可以分配更多的指针。
realloc
这里分配的每个指针都是指向新分配的ans si类型内存块的指针ze
struct packet\u event
。如果您有q's,请告诉我。@DavidC.Rankin谢谢。另一个问题:对于第二个指针
struct packet\u event**packet\u event\u p
,我能像使用第一个指针一样使用它吗?比如
packent\u event\p[5]=…
。两个指针之间的区别在于:第一个指针有大小,而第二个指针没有大小。这是不是正确的?@BohaoLI,是的,但您必须分配指针。在
packent\u event\p[5]
您可以利用为静态分配的对象提供的自动分配。使用
结构数据包事件**数据包事件\u p
,如果您想要相同的
5
指针,则必须执行
数据包事件\u p=malloc(sizeof*数据包事件\u p*5)
现在您的
**event_pack_p
处于与您使用相同的准备接受每个指针地址的状态,例如静态分配的
packent_event_p[5]