C语言——指针与结构体 内存的动态分配

例一 :

 1 #include <stdio.h>
2 #include <string.h>
3
4 struct Student {
5 int sid ;
6 char name[200] ;
7 int age ;
8 };
9
10 void f(struct Student *p);
11 void g(struct Student *p);
12 void h(struct Student stu);
13
14 int main()
15 {
16 struct Student stu ;
17
18 f(&stu);
19 g(&stu);
20 h(stu);
21
22 //printf("%d %s %d \n" ,stu.sid , stu.name , stu.age);
23
24 return 0 ;
25 }
26
27 void g(struct Student *p) //用指针可以减小内存占用 , 节省时间提高效率
28 {
29 printf("%d %s %d \n", p -> sid , p -> name , p -> age);
30 }
31
32 void h(struct Student stu) //值传递
33 {
34 printf("%d %s %d \n", stu.sid , stu.name ,stu.age);
35 }
36
37 void f(struct Student *p) //输入函数
38 {
39 (*p).sid = 23 ; //等价 p -> sid = 23 ;
40 strcpy( p -> name , "zhangsan");
41 p -> age = 34 ;
42 }

例二 :

 1 //////////////////////////////////
2 // ——注释部分为第二种方法——///
3 //////////////////////////////////
4 #include <stdio.h>
5 #include <malloc.h>
6
7 struct Student
8 {
9 int sid ;
10 int age ;
11 };
12
13 //struct Student *CreateStudent(struct Student **q);
14 struct Student *CreateStudent(void);
15 void ShowStudent(struct Student *);
16
17 int main()
18 {
19 struct Student *p ;
20
21 //p = CreateStudent(&p);
22 p = CreateStudent();
23 ShowStudent(p);
24
25 return 0 ;
26 }
27
28 //struct Student *CreateStudent(struct Student **q)
29 struct Student *CreateStudent(void)
30 {
31 /*
32 *q = (struct Student *)malloc(sizeof(struct Student));
33
34 (*q) -> sid = 78 ; // " -> "优先级大于" * "
35 (*q) -> age = 23 ;
36 return *q;
37 */
38 struct Student *p = (struct Student *)malloc(sizeof(struct Student));
39
40 p -> sid = 78 ;
41 p -> age = 23 ;
42
43 return p ;
44 }
45
46 void ShowStudent(struct Student *ps)
47 {
48 printf("%d %d \n" , ps -> sid , ps -> age);
49 }

posted @ 2011-08-13 12:57  MATRIX | yan  阅读(4090)  评论(1编辑  收藏  举报