C语言结构体指针作函数参数问题?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言结构体指针作函数参数问题?相关的知识,希望对你有一定的参考价值。
struct LNode
int data;
struct LNode *next;
*LinkList; //结构体。
int ListTraverse(LinkList l,void(*vi)(int))//函数
LinkList p = l->next;
while(p)
vi(p->data);
p = p->next
printf("\n");
return OK;
错误:error: expected ‘)’ before ‘LinkList’
帮忙解决。。。谢谢!
int data;
struct LNode *next;
*LinkList; //结构体。
修改为
typedef struct LNode
int data;
struct LNode *next;
*LinkList; //结构体。 参考技术A *LinkList 定义的是一个结构体指针,已经实例化了, 并不是一个数据类型
int ListTraverse(LinkList l,void(*vi)(int))//LinkList 不能作为数据类型改成
int ListTraverse(struct LNode* l,void(*vi)(int)) 参考技术B LINKLIST 你在函数定义中编译器会识别为变量类型,但实际上它是个指向一个结构体类型的指针变量,所以无法编译成功,
int ListTraverse(struct LNode*l,void(*vi)(int))如果你需要传递指针的话
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);
#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类型的变量
但是写在主函数里会有这样的错误提示啊:
printf()里的“num”的左侧部分指定未定义的结构/联合“st1”
struct st1*pst1;
这一行应该是struct st *pst1;
类型和变量名是不同的,要区分开来
以上是关于C语言结构体指针作函数参数问题?的主要内容,如果未能解决你的问题,请参考以下文章