【发布时间】:2015-02-19 17:20:21
【问题描述】:
我不明白指针和结构之间的关系;为什么如果我尝试通过 struct 类型的指针访问 struct 成员,并使用指针给它们值,我会得到分段错误??
如果我将结构指针声明为:
typedef struct a {
int b;
}A;
int main(){
A *ptr;
}
我可以使用这种语法访问结构成员
(*ptr).b or ptr->b
即使 ptr 不指向任何内容,ptr 也可以访问 struct 成员,因为 ptr 被声明为 struct 类型,对吧??
如果我没有显式设置指针指向某处,指针一般指向他的类型,在这种情况下A没有??
但是当我尝试通过指针给结构成员一些值时,我总是遇到分段错误
ptr->b=9;
【问题讨论】:
-
通过无效指针访问元素在语法上是正确的,因此它通过了编译。但是,它会在运行时导致未定义的行为。行为符合预期。
-
如果您不将指针指向某物,则它是未定义的行为。它崩溃并不奇怪。
标签: c