请教一个C语言结构体问题:编译出现很多错误,但是把文件名改成.cpp就能编译通过了,这是什么问题啊?

2024-12-14 14:33:07
推荐回答(4个)
回答1:

问题不是出在struct的定义上,c中楼主对struct的定义用法是正确的一种形式,问题是出在你对struct变量的引用上不能只是用rdsa,而是必须用struct rdsa,这是c语言对结构体变量的声明的链掘规定,这也是c与c++在结构变量的声明上的区别,建议楼主对c与c++在教材中分别加以考证~代码需改动为:
void printdata(struct rsda pp)//改动过!
{
struct rsda *p;//改动过!
p=&pp;
printf(format,data);
}
嗯,但是使用typedef时就帆唤悉是定义新的变量类型了,这样就不是在结构体上的问题,这样的话c与c++在态乎其上没有差异。

回答2:

楼上说的不全对。

C语言里边,使用struct来定义结构体,要有struct这个关键厅配中字编译器才认得是个结构体。
所以代码修改如下就能扮山运行了。卖岩
#include "stdio.h"
#include "string.h"
#define format "|%-10s |%8d| \n"
#define data p->name,p->jbgz

struct rsda
{
char name[10];
int jbgz;
}tp[]={"liming",2500,"wanggang",3000,"zhanghan",2800,"liuyang",3200,"dufeng",4300};

void printdata(struct rsda pp)
{
struct rsda *p;
p=&pp;
printf(format,data);
}
void main()
{
printdata(tp[0]);
}
----------------------------
typedef struct rsda
{
char name[10];
int jbgz;
}rsda;
是重新定义了一个新的类型叫rsda,所以下面也就不会报错了。

回答3:

把struct rsda
{
char name[10];
int jbgz;
}tp[]={"liming",2500,"wanggang",3000,"zhanghan",2800,"liuyang",3200,"dufeng",4300};

改数册乎成

typedef struct rsda
{
char name[10];
int jbgz;
}rsda;
rsda tp[]={"liming",2500,"wanggang",3000,"zhanghan",2800,"liuyang",3200,"dufeng",4300};

C编译器对结构体的格式要求可能比C++编译器要求严格点姿让。薯悉

回答4:

如LS所说!!