繁体   English   中英

C语言中的结构体指针的工作示例

[英]Working example for pointers to structs in C

我对C语言中的结构指针感到困惑,部分问题是我发现的示例似乎是错误的。

在这个例子中的代码,我发现在这里 ,我还是得到了可怕的错误:

警告:从不兼容的指针类型分配

#include <stdio.h>

struct Book
{
    char name[10];
    int price;
}

int main()
{
    struct Book a;      //Single structure variable
    struct Book* ptr;   //Pointer of Structure type
    ptr = &a;

    struct Book b[10];  //Array of structure variables
    struct Book* p;     //Pointer of Structure type
    p = &b;  

    return 0;
}

没有任何人有一个工作的例子,我学习的榜样?

更改:

p = &b;

进入:

p = b;

这是因为b [已经]是一个数组。 因此, b本身指的是整个数组,结果指向第一个元素(即&b[0] )。 您所生成的内容将生成一Book **而不是一Book * [1]。

因此,这也将起作用:

p = &b[0];

更新:

[1]我的坏。 实际上,这会生成struct Book (*)[10] ,它是一个指向固定大小(例如10)的Book结构数组的指针,该数组与简单的Book指针[略有不同]。 这会将数组长度添加为类型的一部分,因此指针/类型匹配更加严格/复杂。

即使基本类型( struct Book struct Book (*)[10]也不与struct Book * [typewise]上匹配,并且也不会其他长度固定的数组大小指针(例如struct Book (*)[20] )匹配)是相同的。

但是,一旦定义,指针的取消引用/索引编制将是类似的。

本文对此的使用是无意的。 这是目前可以避免的高级功能/技术。 我很少(如果有的话)在实践中遇到过它。

有关更多信息,请参见: C指针:指向固定大小的数组

b已经是struct的指针,所以简单p = b; 应该做的工作。

我建议阅读第5章 K&R的指针和数组 ,以充分了解指针和数组之间的关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM