这一讲是---------------------结构体指针。
结构体指针数组的使用方法。下面是例子:
// // 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);