• c学习第5天


    这一讲是---------------------结构体指针。

    结构体指针数组的使用方法。下面是例子:

    //
    //  main.c
    //  Struct_Point
    //
    //  Created by 尹亚坤 on 13-10-25.
    //  Copyright (c) 2013年 蓝鸥科技. All rights reserved.
    //
    
    #include <stdio.h>
    #include "Swap.h"
    struct stu{
        int num;
        char *name;
        char gender;
        float score;
    };
    typedef struct stu STUDENT;
    int main(int argc, const char * argv[])
    {
        STUDENT s1={101,"Zp",'M',45};
        STUDENT s2={102,"xiaoming",'M',62.5};
        STUDENT s3={103,"liangliang",'F',92.5};
        STUDENT s4={104,"zhoujielun",'F',87};
        STUDENT s5={105,"llianjie",'M',58};
        STUDENT * stus[5]={&s1,&s2,&s3,&s4,&s5};
        STUDENT *(*ps);
       // STUDENT *p=stus;
        ps=stus;
        for (int i=0;i<5; i++) {
          printf("%s
    ",(*ps++)->name);
        }
        printf("
    ");
        return 0;
    }
    #include <stdio.h>
    #include "Swap.h"
    //#include "Array_Increa.h"
    struct stu{
        int num;
        char *name;
        char gender;
        float score;
    };
    typedef struct stu STUDENT;
    
    int main(int argc, const char * argv[])
    {
        STUDENT s1={101,"Zhou ping",'M',45};
        STUDENT s2={102,"Zhang ping",'M',62.5};
        STUDENT s3={103,"Liou fang",'F',92.5};
        STUDENT s4={104,"Cheng ling",'F',87};
        STUDENT s5={105,"Wang ming",'M',58};
        STUDENT * stus[5]={&s1,&s2,&s3,&s4,&s5};
        STUDENT *(*ps);
    //    int a[3] = {0};
    //    int *p = a
        ps=stus;
        //*temp  *ps    stus[0] 他们三个的值是一样的
        //ps     stus他们是等价的。
        printf("%f
    ",ps[0]->score);
       // printf("%f
    ", *(*ps)->score);
        for (int i=0;i<4; i++) {
            STUDENT *temp={0};
            for (int j=0; j<5-i-1; j++) {
                if (stus[j]->score>ps[j+1]->score) {
                    temp=ps[j];
                    ps[j]=ps[j+1];
                    ps[j+1]=temp;
                }
            }
        }
        for ( int i=0; i<5; i++) {
             printf("%f
    ",ps[i]->score);
        }
        
       // printf("%s
    ",stus[2]->name);
        
        printf("
    ");
        
        return 0;
    }
    指针数组: 是 数组的每个元素都是一个指针。
    inflatable *pa[3]={&s1,&s2,&s3};

    这里 你定义了 一个指针数组的变量,pa[3], 数组包含三个元素每个元素都指向一个 结构体变量对应的内存地址。 分别为 pa[0] 、pa[1] 、pa[2] 三个元素,这个三个元素在数组中都有自己的地址是: pa、pa+1、pa+2 ;如果要访问数组的内容(就是数组元素的指针变量)就需要通过*好来访问 如*pa、*(pa+1)、*(pa+2)。

    你最后的引用
    cout<<" s3's element year's value is "<<(pa+2)->year<<endl;
    cout<<"the third s3's element year's value is "<<*(pa+2).year<<endl;

    pa+2 是 数组元素 的 第三个元素的地址,而不是 第三个元素内容(第三个元素的内容才是指针元素),注意 数组元素的内容才是指针。要访问数组内容 需要 *(pa+2) ,这个就是指向 s3 结构体的指针。

    即最后:
    cout<<" s3's element year's value is "<<(*(pa+2))->year<<endl;
    cout<<"the third s3's element year's value is "<<(**(pa+2)).year<<endl;

    有5个学生,找出成绩大于90分的,在该学生姓名后面加上A.解决方法如下:
    #include <string.h>
    typedef struct stu{
        char name[23];
        float score;
    }Student;
    int main ()
    {
        Student s1={"zhangsan",89};
        Student s2={"zhangsan1",98};
        Student s3={"zhangsan2",69};
        Student s4={"zhangsan3",59};
        Student s5={"zhangsan4",89};
        char name[24];
        Student stus[5]={s1,s2,s3,s4,s5};
        for (int i=0; i<5; i++) {
            if (stus[i].score>90) {
                unsigned long len=strlen(stus[i].name);
                for (int j=0; j<len; j++) {
                    name[j]=stus[j].name[j];
                }
                name[len]='A';
                strcpy(stus[i].name, name);
            }
            printf("%s	",stus[i].name);
        }
        return  0;
    }

      //7、统计一个自然数的二进制表示形式中有多少个1

        int n;
    
        printf("请输入一个自然数
    ");
    
        scanf("%d",&n);
    
        int count=0;
    
        while (n!=0) {
    
        if (n%2==1) {
    
            count++;
    
            n=n/2;
    
        }
            else
    
            {
    
                n=n/2;
    
            }
    
    }
    
        printf("%d
    ",count);
  • 相关阅读:
    职工工资管理系统 c++课程设计
    我的Python自学之路四,字符串的学习
    我的Python自学之路三:元组及字典学习总结
    我的Python自学之路二:列表学习
    我的Python自学之路一:Python学习路线
    vue项目里在微信浏览器调用微信分享及支付一些页面数据的坑
    vue 三种传值方法
    vue里swiper的一些坑
    js 数据导出为txt文件
    js 小数计算为啥和想象中不一样!
  • 原文地址:https://www.cnblogs.com/yinyakun/p/3387744.html
Copyright © 2020-2023  润新知