A. 请教一个C语言结构体问题:编译出现很多错误,但是把文件名改成.cpp就能编译通过了,这是什么问题啊
楼上说的不全对。
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,"feng",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,所以下面也就不会报错了。
B. 执行C语言程序段“struct s{ long a;char b;};printf("%d",sizeof(struct s));” 输出的结果是什么说明
sizeof(type)用于返回指定类型所占内存空间。
比如说,一般的机器上都是:
sizeof(char)返回1,即char类型占1字节,
sizeof(long)返回4,即long类型占8字节,
对于自定义的数据类型struct s{ long a;char b;};,返回的就是该结构体内所有基本数据类型所占字节数的总和,所以sizeof(struct s)应该返回sizeof(long)+sizeof(char)=4+1=5字节。考虑到现在机器对于数据存储一般都要求按边界对齐(这样可以减少读取次数),如果按字对齐的话,那sizeof(struct s)也有可能返回6。LZ你写个测试程序自己测试吧。
C. c语言编译器怎么看结果啊
1、要点两次按钮,第一次是”编译“按钮,看有没有提示出错,提示没出错,才点“运行”按钮,出错要先改对了才能运行,点”运行“按钮。
2、编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)。高级计算机语言便于人编写,阅读交流,维护。机器语言是计算机能直接解读、运行的。编译器将汇编或高级计算机语言源程序(Source program)作为输入,翻译成目标语言(Target language)机器代码的等价程序。源代码一般为高级语言 (High-level language), 如Pascal、C、C++、Java、汉语编程等或汇编语言,而目标则是机器语言的目标代码(Object code),有时也称作机器代码(Machine code)。
D. 在写C语言结构体时,程序编译出现以下问题,请求帮助
在主函数中调用input(p);maxi=max(p);这两个函数的时候,使用的参数是指针p,而在函数实现的时候的参数是结构体型的数组,所以出现警告参数不匹配。而且结构体定义两遍,你在主函数里面定义结构体在外部函数里面是无法使用的,就会出现主函数里面使用的结构体变量和外部函数使用的结构体变量调用不同。
建议都使用结构体型的数组,这个程序里面你使用的指针没有任何意义,反而会引起不必要的麻烦。假如你的结构体数组中学生的数量不确定,建议使用指针链表,这个时候指针就很有意义。
E. c语言这个程序输出结果为什么是24
这是因为编译时存在字节对齐的原因,字节对齐主要是为了提高内存数据读取速度。如果你想要让结果等于实际大小,你可以设置字节对齐大小如
#pragma pack(1)
取消设置
#pragma pack()
字节对齐的规则如下:
结构体的大小等于其最大成员的整数倍;
结构体成员的首地址相对于结构体首地址的偏移量是其类型大小的整数倍。
比如double型成员的首地址相对于结构体首地址的偏移量应该是8的倍数;
满足前两条规则后,编译器会在结构体成员之后进行字节填充。
F. 谁能解释一下c语言结构体为什么结果是8
这个gen不是结构体变量,而是指向一个结构体的指针变量,那指针的长度就是地址的长度了,32位地址系统是4个字节,64位地址系统是8个字节,你的vs应该是64位模式,所以结果就是8
general结构体占用的内存按照对齐原则是24个字节
G. C语言中自己编的结构体数组,结果发现程序运行结果不对
在你基础上改了下,望采纳!!!
#include<stdio.h>
main()
{
struct Staff
{
char number;
int money;
int work;
int praise;
} sta[4];
int i;
for(i=0;i<4;i++)
{
scanf("%c %d %d %d",&sta[i].number,&sta[i].money,&sta[i].work,&sta[i].praise);
getchar();
}
for(i=0;i<4;i++)
{
printf("%c %d %d %d ",sta[i].number,sta[i].money,sta[i].work,sta[i].praise);
}
printf(" ");
return 0;
}
H. c语言结构体 编译出错
b b1={a1,a2,0};
改成:
b b1={{0,0}, {1,1} , 0};
编译器不支持用结构体变量来初始化结构体变量成员