假设我们有
struct me {
int b;
};
void main() {
struct me *m1;
m1->b=3;
}
我的问题是,因为m1是我的类型指针,目前是 不保存任何类型变量的地址,然后我们如何访问我的成员b 通过一个指向不指向任何类型变量的指针,如果我们可以那么类型我的哪个变量正在访问?
答案 0 :(得分:3)
要么是
struct me m1;
m1.b = 3;
或
struct me *m1 = malloc(sizeof(struct me));
m1->b = 3;
当你处理C中的指针时,通常需要做三件事:
你的解决方案只做了第一个。
你的printf工作的原因是,实际的分配和阅读仍然有效。你在你的过程中覆盖了一些随机内存,这次没有任何灾难性的后果。但这是纯粹的“运气”。你也可能最终遇到了分段错误。
答案 1 :(得分:1)
1)你必须为你首先指向的对象分配空间
2)然后 - 然后 - 只能 - 你可以指定值m1-> b = 3
答案 2 :(得分:1)
void main()
{
struct me *m1=malloc(sizeof(struct me)); //here allocating the memory first
m1->b=3;
//do what you want to do
free(m1); //once you allocate the memory, you have to free it after your job is done
}
如果您没有分配内存和访问权限(就像您所做的那样),那么您正在访问m1
所指向的内存部分。它会编译好。但如果m1
的值超出代码段,则会产生segmentation fault
。此外,如果它在您的细分中,它可能会覆盖其他值。所以在使用它之前总是需要分配内存。