zl程序教程

您现在的位置是:首页 >  其他

当前栏目

2015.08.21 结构体指针

amp 结构 指针 21 nbsp
2023-09-14 08:59:37 时间
   1、 //整形指针指向整型变量的指针    int *p = NULL;//指针的标识,告诉编译器这是个指针变量     int a = 10;     p =         printf("%d\n",*p);//取出指针变量p指向内存中的值   *p = 20;//*向指针变量p指向的内存中存储数据    //浮点型指针:指向浮点型变量指针;   float *p1 = NULL;   float b = 3.14;    p1 =    printf("%.2f\n",*p1);       //字符型指针:指向字符型变量的指针   char *p2 = NULL;     char c = a;    p2 =     printf("%c\n",*p2);    //总结:什么类型的指针,就是这个指针指向什么类型的变量 2、结构体指针的格式 指针的定义的格式:类型标示符 *指针变量名 =初始值; 结构体的首地址,就是结构体第一个成员变量的首地址 //    int *p1 = NULL;
//    int a = 20;
//    p1 = //   *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

《C和指针》一导读 我在授课时,很早便开始讲授指针,而且在以后的授课过程中也经常讨论指针。我描述它们在各种不同的上下文环境中的有效用法,展示使用指针的编程惯用法(programming idiom)。我还讨论了一些相关的课题如编程效率和程序可维护性之间的权衡。指针是本书的线索所在,融会贯通于全书之中。