欢迎来到贱贱的博客

扩大
缩小

c语言指针与结构体之内存动态分配

 1 struct dangdangtest
 2 {
 3     char email[500];
 4     char name[30];
 5     char addr[100];
 6     int num;
 7     int bugnum;
 8     char tel[20];
 9     char phone[20];
10     double RMB;
11     
12     
13 };
14 void main2()
15 {
16     //struct dangdangtest dd[1024*1024];//数组越界
17     //动态分配一个元素
18     struct dangdangtest *p = (struct dangdangtest *)malloc(sizeof(struct dangdangtest)*1);
19     //写数据
20     sprintf(p->email,"15465325698@qq.com");//初始化
21     sprintf(p->name,"lj");
22     sprintf(p->addr,"重庆");
23     p->num = 100;
24     p->bugnum = 1000;
25     sprintf(p->tel,"4521562");
26     sprintf(p->phone,"15865321512");
27     p->RMB = 52.24;
28     //读数据
29     printf("\n%s,%s,%s,%d,%d,%s,%s,%f",p->email,p->name,p->addr,p->num,p->bugnum,p->tel,p->phone,p->RMB);
30     
31     getchar();
32 }
33 
34 void main()
35 {
36     int i;
37     struct dangdangtest *p = NULL;
38     struct dangdangtest *px = NULL;
39     p= (struct dangdangtest *)malloc(sizeof(struct dangdangtest)*10);
40     //方式一 P[i]等价于一个结构体 数组访问的方式
41     //p[i]=p+i
42     /*for(i=0;i<10;i++)
43     {
44         sprintf(p[i].name,"lj%d",i);
45         sprintf(p[i].addr,"重庆%d",i);
46         p[i].num = 100;
47         printf("\n%s,%s,%d",p[i].name,p[i].addr,p[i].num);
48     }*/
49 
50     //指针访问的方式
51     //for(i=0;i<10;i++)
52     //{
53     //    //加上大括号 避免优先级的歧义
54     //    sprintf((*(p+i)).name,"lj%d",i);
55     //    sprintf((*(p+i)).addr,"重庆%d",i);
56     //    (*(p+i)).num = 100;
57     //    printf("\n%s,%s,%d",(*(p+i)).name,(*(p+i)).addr,(*(p+i)).num);
58     //}
59     
60     //指针轮寻
61     px  = p;
62     for(px;px<p+10;px++)
63     {
64         sprintf(px->email,"lj%x",px);
65         sprintf(px->addr,"重庆%x",px);
66         px->num = 100;
67         printf("\n%s,%s,%d",px->email,px->addr,px->num);
68     }
69     getchar();
70 
71     
72 }

注意测试的时候main处修改 和注释就好了

posted on 2016-10-29 18:24  L的存在  阅读(7772)  评论(0编辑  收藏  举报

导航