定义的结构体指针,如果直接给指针的成员赋值是需要用先malloc分配空间才可以使用,如果指针指向具体结构体的地址则不需要进行分配空间,就可以直接使用
1 #include<stdio.h>
2
3 struct STR{
4 int a;
5 char b;
6 };
7
8 void func1(struct STR *point)
9 {
10
11 printf("point->a=%d\n",point->a);
12 printf("point->b=%c\n",point->b);
13 }
14
15 void func2(void *point) //void型的指针可以接受任意类型的指针,且没有警告。如果是其他类型的指针,传递参数时要先强制转成一致的类型
16 {
17 //printf("point->a=%d\n",point->a);
12 //printf("point->b=%c\n",point->b);
18 struct STR *p;
19 p = (struct STR *)point;
20 printf("point1->a=%d\n",p->a);
21 printf("point1->b=%c\n",p->b);
22 }
23
24 int main(){
25 struct STR *p; //在这样直接就 对p->a进行赋值,会core dump的,如果想直接赋值,先用malloc分配空间
26 struct STR str;
2 p = &str; //不用malloc的话,则需要指向一个实体结构体的地址,才可以正常使用指针
30 p->a = 1;
31 p->b = '7';
32 printf("p->a=%d\n",p->a);
33 printf("p->b=%c\n",p->b);
34 func1(p); //结构体指针作为参数传递时,如果函数的指针类型和结构的指针类型一致,在函数内部就可以直接使用
35 func2(p); //类型不一致时,在函数内部要转化一下再使用
3
37 }
结果:
p->a=1
p->b=7
point->a=1
point->b=7
point1->a=1
point1->b=7