C语言结构体指针定义问题 - C / C++ -

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言结构体指针定义问题 - C / C++ -相关的知识,希望对你有一定的参考价值。

那个程序的结构体是这样定义的:[ol][*]struct book[*][*]??int num;[*]??float price;[*]??struct book*next;[*];[/ol]这个里面next的定义有点不明白,它没有指向任何地方吗,怎么和一般的定义不一样,哪位高手指导下

参考技术A struct book*next; 本身就是一个结构体类型的指针 指针应该是指向下一个节点啊结构体定义变量的时候 是一个整体所以跟一般定义的指针变量有区别 不过这个指针还是要初始化的 也是要分配指针指向的 它是一个域 参考技术B 再给你个例子,你就明白啦[ol][*]#include [*][*]struct book[*][*]??int num;[*]??float price;[*]??struct book*next;[*];[*][*]int main(void)[*][*]struct book book1=1,1.0f, 0;[*]struct book book2=2,2.0f, 0;[*]struct book book3=3,3.0f, 0;[*][*]book1.next = &book2;[*]book2.next = &book3;[*][*]struct book *bookt;[*]bookt = &book1;[*]printf(\"current book num is:%d\\n\", (*bookt).num);[*]bookt = (*bookt).next;[*][*]printf(\"current book num is:%d\\n\", (*bookt).num);[*]bookt = (*bookt).next;[*][*]printf(\"current book num is:%d\\n\", (*bookt).num);[*][*]system(\"pause\");[*][*]return 0;[*] [/ol] 参考技术C [ol][*]struct book[*][*]??int num;[*]??float price;[*]??struct book*next;[*];[/ol]这说明结构体book中包含三个数据成员,包括 整型的num、浮点型的price和指向book类型变量的指针next这种结构往往用来实现链表。 参考技术D 显然这个结构体是个链表节点这个指针在链表操作的时候会被赋值的

C语言中关于结构体指针为啥不能在函数内赋初值的问题?

#include<stdio.h>
struct st

int num;
st1 = 1 , st2;
struct st1*pst1;
pst1 = &st1;//这一行为什么放在main外面,下面的pst1->num的pst1不会有下波浪线报错(我用的vs2017)
void main()
printf("%d", pst1->num);

struct st1*pst1; //问题在这句,这个指针pst1指向的类型是st1,而不是st,所以pst1 = &st1是不可以的,自然 pst1->num也就不对了
#include<stdio.h>
struct st

int num;
st1 = 1 , st2;
struct st*pst1; //是st*,而不是st1*

void main()
pst1 = &st1; //放在局部,全局区是不能赋值的
printf("%d", pst1->num);
追问

请问是不是说struct st这个st如果不定义的话,结构体指针要想定义就必须用typedef定义结构体是这个意思把?

追答

struct st 的意思是定义了一个叫st的类型

struct st

int num;
st1 = 1 , st2; //这个就是定义了两个st类型的变量,这两个变量名叫st1,st2
struct st* pst1; // 定义了一个指向st类型变量的指针
struct st1* pst1; // 定义了一个指向st1类型变量的指针,你的代码里不存在st1类型
pst1 = &st1 //st1的类型是st,所以&st1的类型就是st* , 而不是st1*

就像int一样
int int1; //int是类型,int1是int类型的变量

参考技术A 赋值语句属于执行语句,必须写在函数体里,不能写在全局区。追问

但是写在主函数里会有这样的错误提示啊:
printf()里的“num”的左侧部分指定未定义的结构/联合“st1”

追答

struct st1*pst1;
这一行应该是struct st *pst1;

参考技术B

类型和变量名是不同的,要区分开来

以上是关于C语言结构体指针定义问题 - C / C++ -的主要内容,如果未能解决你的问题,请参考以下文章

C++/CLI下使用结构体数组的问题

C语言,宏定义和结构体指针问题,求高手解答啊,谢谢了!!

c语言 结构体的指针作为函数参数问题

C语言中typedef定义结构体指针的区别?

关于C语言结构体指针做函数形参的问题

C语言 NULL赋结构体指针变量