结构体常见问题

问题一: 结构体的自引用

错误: 

typedef struct _Pos{
    int x;
    int y;
    struct _Pos z;
}pos;

定义一个结构体,其内部又定义了一个同类的结构体变量,这是一种错误。(因为如果你在结构体内部定义自己类型的结构体变量,在定义结构体的过程中,它会不断地去创建新的结构体变量,一直递归下去,没完没了) -- 有的编译器会检测到这种错误的写法。


正确:
我们可以在结构体内部放一个指向自己类型的指针,这样就不会出现上面的问题了。
typedef struct _Pos{
    int x;
    int y;
    struct _Pos *z;
}pos;

 

问题二:  结构体指针 

pos* ptr;       // 定义一个结构体指针

注意下面的操作是不合法的:

ptr+1;             //  对于结构体,因为其内部存储数据类型并不一样,所以我们无法使用指针                               或者下标运算符进行访问内部数据 

(*ptr)+1;         // ptr是指向结构体的指针,内部存放的是结构体所在的地址,虽然结构体所在的地址(其首地址),和其第一个元素的(首)地址是一样的,但是*ptr的结果并不是结构的第一个元素,而表示的是ptr指向的是结构,因为ptr是结构类型的指针。对于结构体和一个整数像加时未定义的。

C语言结构体常见错误包括以下几种情况: 1. 未声明结构体变量:在使用结构体之前,需要先声明结构体变量。如果没有声明结构体变量就直接使用,会导致编译错误。 2. 结构体成员命名冲突:在同一个结构体中,不能有相同名称的成员变量。如果出现了命名冲突,会导致编译错误。 3. 结构体成员类型错误:结构体成员的类型必须是合法的C语言类型,不能是其他结构体类型。如果使用了非法的类型,会导致编译错误。 4. 结构体成员访问错误:在访问结构体成员时,需要使用成员运算符“.”。如果使用了其他的运算符或者语法错误,会导致编译错误。 5. 结构体大小计算错误:在计算结构体大小时,需要考虑对齐和填充的规则。如果没有正确计算结构体大小,可能会导致内存访问错误或者数据错乱。 6. 结构体赋值错误:在给结构体赋值时,需要逐个成员进行赋值。如果使用了错误的赋值方式,可能会导致数据错误或者编译错误。 7. 结构体传参错误:在函数参数中传递结构体时,需要使用正确的传参方式。如果使用了错误的传参方式,可能会导致函数调用错误或者数据错误。 8. 结构体嵌套错误:在定义嵌套结构体时,需要注意结构体的顺序和嵌套关系。如果嵌套关系错误,可能会导致数据错误或者编译错误。 9. 结构体成员顺序错误:在定义结构体成员时,需要按照正确的顺序进行定义。如果顺序错误,可能会导致数据错误或者编译错误。 10. 结构体成员未初始化:在定义结构体变量时,需要对结构体成员进行初始化。如果没有正确初始化结构体成员,可能会导致数据错误或者编译错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值