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
    

相关文章
|
1月前
|
C语言
指向结构体数组的指针
指向结构体数组的指针
13 2
|
2月前
|
C++
【编码狂想】指针航行,链表魔法,解锁结构体和类的编程幻境
【编码狂想】指针航行,链表魔法,解锁结构体和类的编程幻境
58 1
C4.
|
1月前
|
存储 C语言
C语言的结构体指针
C语言的结构体指针
C4.
9 0
|
2月前
|
存储 C语言
指针&结构体题
指针&结构体题
27 2
|
6月前
|
Go
Golang 语言怎么打印结构体指针类型字段的值?
Golang 语言怎么打印结构体指针类型字段的值?
139 0
|
3月前
|
存储 C++ 容器
C/C++常见的易模糊知识点(结构体、指针、STL)
C/C++常见的易模糊知识点(结构体、指针、STL)
C/C++常见的易模糊知识点(结构体、指针、STL)
|
4月前
指向结构体类型数据的指针
指向结构体类型数据的指针。
29 3
|
5月前
|
存储 C语言
指针&结构体题下
指针&结构体题
24 1
|
5月前
指针&结构体题上
指针&结构体题
28 0
|
7月前
|
C语言
【C语言】——define和指针与结构体初识
【C语言】——define和指针与结构体初识

热门文章

最新文章