码迷,mamicode.com
首页 > 其他好文 > 详细

结构体指针

时间:2017-10-12 01:08:10      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:div   sys   函数   结束   sizeof   col   拷贝   pause   分配   

  今天我们来说一说结构体指针,真如同前面讲过的结构体也是一种数据类型,既然是数据类型就可以通过它来定义指针变量,代码如下:

  

 1 #define _CRT_SECURE_NO_WARNINGS//一个warning,阻止对不安全函数的警告
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <stdlib.h>
 5 
 6 typedef struct List//首先定义一个结构数据类型//这时是没有分配内存空间的
 7 {
 8     int a;
 9     char name[32];
10 }List;
11 
12 void main()
13 {
14     List L1;//定义一个List类型的变量,这里分配了内存空间
15     List *L2 = NULL;//定义一个List类型的指针变量,它只有4个字节
16     L1.a = 23;
17     strcpy(L1.name,"name");//数据拷贝到name里
18 
19     //我们知道可以通过指针来操作变量,将地址传递给指针
20     L2 = &L1;
21     //可以通过指针来操作内存空间
22 
23     printf("%d \n",sizeof(L2));//指针的空间大小是 4 个字节不管是什么指针都是四个字节
24     printf("%d \n",L2->a);//23
25     printf("%s \n",L2->name);//name
26 
27 
28     system("pause");
29     return;
30 }

  然后我们可以看到用List类型定义的指针可以指向List类型的变量,即什么类型的指针可以操作什么类型的变量空间;我们可以看到结构体指针的寻标符是 -> ,寻标符没有太多的意义,可以理解为:寻标符,寻标符寻找到目标的符号;

  那么可不可以像普通的指针一样,可以自定义的分配内存空间呢?

 1 List* distribution2()
 2 {
 3     List *L = NULL;//定义一个指针变量
 4     L = (List*)malloc(sizeof(List));//在堆区为其分配空间//由于是手工分配的,所以如果不主动释放掉的话,会一直占着资源直到整个程序结束
5 L->a = 10; 6 strcpy(L->name,"name2"); 7 printf("L:%d\n",L);//L所指向的地址 8 printf("&L->a:%d\n",&L->a);//头元素的地址 9 return L; 10 11 } 12 13 void main() 14 { 15 16 List *L = NULL; 17 List L1; 18 printf("&L1:%d\n",&L1);//L1的地址 19 printf("&L1.a:%d\n",&L1.a);//L1头元素的地址 20 21 L = distribution2();//用L来接受传递回来的地址 22 printf("%d \n",L->a);//10 23 printf("%s \n",L->name);//name2 24 system("pause"); 25 }

 

  同样我们发现与基本的数据类型一样,同样可以为结构体指针自定义的分配内存空间,并且不会被自动析构掉;与普通的指针差别不大;

  同样我们发现不管是普通变量还是指针变量,他们分配的地址和头元素的地址是一样的;也就是说找到头元素的地址就找到了分配的内存地址;

结构体指针

标签:div   sys   函数   结束   sizeof   col   拷贝   pause   分配   

原文地址:http://www.cnblogs.com/huhaihao/p/7653438.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!