博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2015.08.21结构体指针
阅读量:6618 次
发布时间:2019-06-25

本文共 2052 字,大约阅读时间需要 6 分钟。

  1、 //整形指针指向整型变量的指针
  int *p =NULL;//指针的标识,告诉编译器这是个指针变量
   int a = 10;
   p = &a;
  
   printf("%d\n",*p);//取出指针变量p指向内存中的值
 *p = 20;//*向指针变量p指向的内存中存储数据
  //浮点型指针:指向浮点型变量指针;
 float *p1 = NULL;
 float b = 3.14;
  p1 = &b;
  printf("%.2f\n",*p1);
  
  //字符型指针:指向字符型变量的指针
 char *p2 = NULL;
   char c = 'a';
  p2 = &c;
   printf("%c\n",*p2);
 
 //总结:什么类型的指针,就是这个指针指向什么类型的变量
2、结构体指针的格式
指针的定义的格式:类型标示符*指针变量名 =初始值;
结构体的首地址,就是结构体第一个成员变量的首地址
//   int *p1 = NULL;
//   int a = 20;
//   p1 = &a;
//  *p1  等价于 a
//       ->   指向操作符
//  ->  前面只能是结构体指针变量,而且必须是指向结构体变量首地址的结构体指针变量
3、经典例题——————————————————
//定义一个老师的结构变量“LiWuhua”
//通过结构体指针将姓名中的首字母改为大写,并把' '改为'_';
//   Teacher teacher2 = {"xia yinjun",30,"playPlane"};
//   t = &teacher2;//指针的重指向
//   if (t->name[0] >= 'a' && t->name[0] <= 'z'){
//       t->name[0] -= 32;
//   }
//   
//   int i = 0;
//   while (t->name[i] != '\0') {
//       if (t->name[i] == ' ') {
//           t->name[i] = '_';
//       }
//       i++;
//   }
//   printf("%s%d%s\n",t->name,t->age,t->hobby);
4、公式:
//结构体数组和指针
   Student stu[5] = {
       {1,"guanXi",'m',19,90},
       {3,"tingFeng",'m',20,91},
       {2,"boZhi",'w',18,99},
       {5,"liZongRui",'y',30,59},
       {4,"zhaoSi",'y',40,100}
    };
   
   数组名就是指针,指向数组的首地址,数组首个元素的地址
    *stu               :   stu[0]
    *(stu +1)  : stu[1]
    *(stu +2) :   stu[2]
    *(stu +3) :   stu[3]
    *(stu +4) :   stu[4]
    *(stu +5) :   stu[5]
   
   //访问数组中元素的姓名成员变量
   //         (*stu).name   :   stu[0].name
   //(*(stu+1)).name   :   stu[1].name
   //(*(stu+2)).name   :   stu[2].name
   //(*(stu+3)).name   :   stu[3].name
   //(*(stu+4)).name   :   stu[4].name
   //(*(stu+5)).name   :   stu[5].name
   
   printf("%s\n",(*stu).name);1
   printf("%s\n",stu[0].name);
// ->使用指向操作符访问数组中元素
    //stu->name         :           stu[0].name
    //(stu + 1)->name :           stu[1].name
    //(stu + 2)->name :           stu[2].name
    //(stu + 3)->name :           stu[3].name
    //(stu + 4)->name :           stu[4].name
   printf("%s\n",stu->name);
   printf("%s\n",(stu +1) ->name );
   
   //将数组中的第四个元素的名字改为“aJiao”
   
    strcpy((stu+3)->name, "aJiao");
   printf("%s\n",(stu + 3)->name);
   
5、
 区别  
  
//str数组中存储的字符串是从常量去拷贝过来的,放到自己的空间里这时修改数组中的数据,没有影响到常量区内容;
//   char str[] = "iPhone";
//   char *p1 = str;
//   p1[1] = 'p';
//   printf("%s\n",p1);
   
//*p2指向的是常量区的字符串,常量区的内容是不允许修改的,这时指针p2只拥有访问权,没有修改权
//   char *p2 = "iPhone";
//   p2[1]= 'p';    error  !!!
//   printf("%s\n",p2);
   

转载地址:http://xbypo.baihongyu.com/

你可能感兴趣的文章
django总结二:django安装
查看>>
学习kafka教程(一)
查看>>
[LeetCode] 684. Redundant Connection
查看>>
实用webpack插件之DefinePlugin
查看>>
说说股票配资系统中实盘交易接口的开发
查看>>
开源 serverless 产品原理剖析(二) - Fission
查看>>
数据科学家的自我修养 | 哪些技能是必不可少的?
查看>>
原型模式故事链(4)--JS执行上下文、变量提升、函数声明
查看>>
electron-builder打包见解
查看>>
手把手教你数据不足时如何做深度学习NLP
查看>>
放大倍数超5万倍的Memcached DDoS反射攻击,怎么破?
查看>>
【Java猫说】Java多线程之内存可见性(下篇)
查看>>
cas工作原理浅析与总结
查看>>
php-socket 客户端/服务端
查看>>
SVN迁移到GIT且保留提交日志
查看>>
cookie、localStorage和sessionStorage详解
查看>>
Python Logging 日志记录入门
查看>>
jenkins+maven+docker+github全自动化部署SpringBoot实例
查看>>
canvas图片绘制跨域问题解决方案Tainted canvases may not be exported
查看>>
Codepen 每日精选(2018-4-28)
查看>>