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);
原文地址:https://www.cnblogs.com/yinyakun/p/3387744.html