[英]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.