c语言结构体问题

作者&投稿:褚泳 (若有异议请与网页底部的电邮联系)
c语言结构体问题~

C++编译器将结构体作为一种特殊形式的类,而结构体名就是类名,与类定义对象形式相同,因此以上代码中node *p或node *next的形式是合法的;
而对于标准C语言,必须按照struct node *p这种形式,否则无法通过编译。

计算方法:

如果是16位编译器,char一字节,int两字节,double8字节,
6+2*4+8=22
如果是32位编译器,char一字节,int四字节,double8字节,
6+4*4+8=30
如果按最长变量对齐就是8+16+8=32

C语言 结构体字节对齐问题 - Ruoh3kou - 博客园
https://www.cnblogs.com/ruoh3kou/p/9979850.html

1、stutype不是变量名,而是定义一个struct stu结构体新的别名。例如要定义一个该结构体变量可以有以下两种定义方法:(1)struct stu stu_t; (2)stutype stu_t; 这两种方法其实是一样的。
2、如果这么定义结构体(去掉typedef)
struct stu{
int a;
float b;
}stutype;
那么D就是对的

typedef 为C语言的关键字,作用是为一种数据类型定义一个新名字(别名)。所以这里的stutype是struct stu 结构类型的别名,不是结构体变量。
例如:typedef unsigned char uchar
描述:这里的uchar等价于unsigned char类型定义, uchar X 声明等于unsigned char X声明


C语言结构体长度字节对齐问题
因为当结构体中有多个数据类型时,结构体的长度对齐是按数据类型长度最长的那个来对齐的,double类型占8个字节,所以每个成员变量都按8个字节的长度来算,就是5*8=40,验证程序如下:include <stdio.h>struct chji{char name[9];int number;char sex;double score;float aa;};struct chji stu;int ...

C语言结构体小问题
呵呵 肯定的啊。后面这个date是你定义的一个结构体变量 就像int a;一样 前面的struct..{} 都是定义类型,就像int,只不过这个类型是你自己定义的 用你自己定义的一个类型 创建一个变量就是这种形式。这里的date 就相当于上面所举得a的例子。你后面不是还要用到date这个变量。你把date改成wyj什么...

C语言结构体循环出错和string.h问题
。。解决方法是在scanf后面加个getchar();接受多余的回车 问题2: strcmp是比较字符串的。所谓字符串是字符数组s[n]的形式,以'\\0'为结束符。字符串的名字其实是数组的头指针,同时strcmp的参数也是字符数组指针,不是字符变量。而你在结构体里的name是字符型的变量,所以不能用strcmp比较。

关于c语言结构体变量成员引用的问题
scanf的用法,格式后的参数都必须是地址,name是数组名,本身就是数据,age和sex都是整型数据,必须使用取地址符&。p是struct student*类型,stu是stu[3]这个数组的第一个元素的地址,p指向第一个元素,因此ABC都是对的,D错在把(int*)变量值赋值给(struct student*)变量,有个强制转换则不会错,...

关于C语言结构体重复定义的问题
你所谓的结构体定义只是个声明,编译的时候并不会分配实际空间。只有在用它去定义一个变量的时候才会有具体的空间。类似一个概念,没有实体。所以在不同的文件中包含头文件,链接的时候不会有什么问题。但是你在main.cpp里又声明了一个同样名字的结构,就有冲突了,同一个名字有不同的内容,这个是不...

c语言 结构体数组的问题
struct st a[2];这个数组的长度是2,只能存放两行数据,为什么你能输入三行呢???将for(t=0;t<=2;t++)中t<=2修改为 t<2 或将 a[2]这个数组修改为 a[3]

c语言结构体问题求解释谢谢
我想你的问题不是得不到5,3的结果,而是问怎么理解吧 printf("%d,%d\\n,(++p)->a,(p++)->a); 这个语句之前, p 指向 &str[1]这个printf语句这样解释:(++p)->a 语句之前先处理指针 p,再 p->a (p++)->a 先p->a,语句之后再处理 指针 p printf 是 C语言,应该是 ...

C语言结构体的运用问题 求解答
对结构体内变量的赋值和引用不需要按照定义结构体变量定义的顺序 你报错是因为打印的变量类型不匹配 s 是打印字符串, 所以应该是name

c语言结构体那块的队列问题。我们书上没有,是能给我讲讲。把我讲懂我...
你好,队列用简单的话讲就是一个数组,这个数组是先进先出的。队列包含两个属性,一个叫head,head指向队头,另一个叫tail,tail 指向当前的队尾。举个例子:用一个数组q[1...n]来表示一个队列,里面最多放n-1个元素,各元素的位置为:head,head+1,...,tail-1,在最后一个位置要进行圈...

C语言结构体中的[]问题,非高手莫进!
编译对那个 char table[]; 这种定义会默认解释成 char table[0];零长数组, 这个特性多数是编译器的扩展, 零长数组是不占用空间的,你它进行 sizeof() 返回是零, 它只是在语法上提供一个符号, 访问它相关于访问 tt.num 后续的内存, 就像你第二个例子, 由于局部变量是在栈上分配的, 所以 tt....

崇安区15043675795: C语言结构体问题 -
爱新觉罗念新开: 朋友 你碰上的是经典错误 首先第一个错 pn->b/n.a*++pn->b 翻译之后变成 b/a*(++b) = 3/1*4 = 12 第二个错 即使按照你所描述的想法 估计按照你写的程序 你会这样改 : pn->b/n.a*(++pn)->b 你肯定认为 (++pn)->b 是指向 c (也就是5.0)的吧 ...

崇安区15043675795: C语言中的结构体类型是什么? -
爱新觉罗念新开: 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构.结构体同时也是一些元素的集合,这些元素称为结构体的成...

崇安区15043675795: C语言修改结构体中数据的问题 -
爱新觉罗念新开: 因为char型数组没有重载运算符=,不能对其进行直接复制字符串 可以借助strcpy函数完成,如strcpy(lib[0].name, "asd");就是将“asd”拷贝到lib[0].name中

崇安区15043675795: 一个c语言结构体问题 -
爱新觉罗念新开: typedef struct LNode { ElemType data; struct LNode *next }LNode,*LinkList;这是结构体定义的一种方式,typedef是给结构体去别名的,所以第一行的struct LNode是结构体名字,在C语言中要用struct LNode定义编译器才能识别, 直接使用LNode会出错,不过用了typedef定义别名之后,就可以直接使用LNode定义结构体了,就是说第三行的LNode是struct LNode的别名,而*LinkList也是别名,不过是针对struct LNode的指针来定义的,相当于struct LNode* 希望没把你绕晕

崇安区15043675795: 一个C语言结构体问题
爱新觉罗念新开: 这里的S是一个宏定义的结构体名相当于老大,后面的T是变量名S的一个结构体变量,在S下是可以定义很多结构体变量的,请放心使用 你那个应该是typedef吧

崇安区15043675795: C语言 结构体,简单问题
爱新觉罗念新开: 这是结构体对齐问题,首个变量是成员的整数倍,而且是最长变量的整数倍.所以是8

崇安区15043675795: C语言关于指针和结构体的小问题 -
爱新觉罗念新开: struct st {int x; int *y;}*pt;//struct st * 的变量pt.int *y是int类型的指针y. int a[]={1,2},b[]={3.4};//两个数组. struct st c[2]={10,a,20,b};初始化了两个结构体c[0]={10,a}和c[1]={20,b}.其中c[0]={10,a}等价于c[0]->x=10;c[0]->y=a;(c[0]->y=&a[0];) pt=c;...

崇安区15043675795: C语言中结构体的问题 -
爱新觉罗念新开: 不会有问题的,把头文件包含进来就可以了,两个结构体互相引用时,如果不是指针才会出错,如果两个结构体有互相引用,就要先把一个typedef为空结构,这样编译才不会出错,编译过了就没问题了,有问题可以联系444376843,注明是“提问C”

崇安区15043675795: C语言 关于结构体的问题 求解答 -
爱新觉罗念新开: #include#include typedef struct Student{ char num[24]; char name[24]; int score[3];} stu;int main(){ int n; while(scanf("...

崇安区15043675795: 关于c语言结构体的问题 -
爱新觉罗念新开: 你这里的问题应该是把*p这个东西用作了for的判断条件,*p是一个结构体的值,根本就不可能转化为bool类型的量.如果N是你的结构体数组的元素个数,那么你的fun函数就这样写吧:double fun(STREC *a, STREC *b, int *n) { STREC *p=a ;double av=0; int i=0;int j;//加了一个j变量,用作循环的判断条件 for(j=0;js; av=av/N; p=a; for(j=0;js)>av){b[i]=*p;i++;}} *n=i; return av; }//楼上是在胡扯,同类型结构体是可以直接相互赋值的.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网