关于结构体声明与使用的有关问题

关于结构体声明与使用的问题
在我的程序中有个打印结构体的函数
C/C++ code

#include <stdio.h>
void display(struct persons *p)

//定义
struct persons {
    some code;
}
//初始化
struct persons person={  
    some code;
}

int main()
{
    display();
}

void display(struct persons *p)
{
    some code;
}



这样通不过编译
但是下面的情况可以

C/C++ code

#include <stdio.h>


//定义
struct persons {
    some code;
}
//初始化
struct persons person={  
    some code;
}

void display(struct persons *p)

int main()
{
    display()
}

void display(struct persons *p)
{
    some code;
}



是不是说如果用到结构体(作为参数或调用),需要事先知道结构体是什么结构?
第一种情况在函数声明时,是不是还不知道persons的结构,所以出错呢?


------解决方案--------------------
函数声明中需要知道具体的类型

------解决方案--------------------
或者先声明一下也可以:
struct persons;

自定义的类型,
系统不认识啊,
自然会报错了......