2015.08.21 结构体指针

简介:
   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、经典例题——————————————————
//定义一个老师的结构变量“LiWu hua”
//通过结构体指针将姓名中的首字母改为大写,并把' ' 改为'_';
//    Teacher teacher2 = {"xia yin jun",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://blog.csdn.net/qq_31810357
    

相关文章
|
2月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
161 13
|
2月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
61 4
|
4月前
|
存储 Go
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
|
5月前
|
存储 C语言
指针与结构体
指针与结构体
43 0
|
7月前
|
算法 Java 程序员
面向对象编程(OOP)通过对象组合构建软件,C语言虽是过程式语言,但可通过结构体、函数指针模拟OOP特性
【6月更文挑战第15天】面向对象编程(OOP)通过对象组合构建软件,C语言虽是过程式语言,但可通过结构体、函数指针模拟OOP特性。封装可使用结构体封装数据和方法,如模拟矩形对象。继承则通过结构体嵌套实现静态继承。多态可通过函数指针模拟,但C不支持虚函数表,实现复杂。C语言能体现OOP思想,但不如C++、Java等语言原生支持。
73 7
|
7月前
结构体\结构体指针
结构体\结构体指针
40 3
|
7月前
【洛谷 P1563】[NOIP2016 提高组] 玩具谜题(模拟+结构体数组+指针)
**摘要:** NOIP2016提高组的玩具谜题是一个编程挑战,涉及理解玩具小人在圆圈中的相对位置。题目要求解决一系列基于小人朝向(内或外)的左右数指令,来找到最终目标小人。输入包含小人数量、指令数、每个小人的朝向和职业,以及指令详情。输出是最后到达的小人的职业。给定的AC代码使用指针模拟环状数组,通过按位异或判断朝向来移动指针。样例展示了问题的解决过程。子任务有不同的数据规模和限制条件。
61 0
|
8月前
|
存储 C语言 索引
指向结构体数组的指针
指向结构体数组的指针
86 0
|
8月前
|
存储 C++
指向结构体变量的指针
指向结构体变量的指针
56 0
|
8月前
|
C++
结构体变量与结构体变量指针作为函数参数
结构体变量与结构体变量指针作为函数参数
70 0