A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wxh794708907 中级黑马   /  2015-7-25 19:09  /  453 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

应用1:打印出两个数总最大数的地址

int *max2(int *x,int *y){      //注意这里的形参是指针变量,main传过来的是地址;
    printf("max x = %p\n",x);
    printf("max y = %p\n",y);
    return *x>*y ?x :y;

}

int main(int argc, const char * argv[]) {
   
    //返回a 、b两个数中大数的地址
    int a = 3,b = 4;
    printf("a = %p\n",&a);
    printf("b = %p\n",&b);
    int *p =max2(&a,&b);
    printf("p = %p\n",p);
   
   
    return 0;
}

应用2.通过指针函数来实现当用户输入1-7这几个数时提示周一到周日;
#include <stdio.h>
#include <stdlib.h>

//3
char *getDay(int n){

    //这是定义一个字符串指针数组
    char *days[]={
        
    "星期一",
    "星期二",
    "星期三",
    "星期四",
    "星期五",
    "星期六",
    "星期日",
   
    };
   
    return n<8&&n>0 ? days[n-1]:"输入错误!";


}

int main (){
printf(”%s”,getdays(4));

}

应用3:定义一个函数 函数参数为指针变量 求十个数中的最大值:
int  getMax(int *p,int len){

    //假设max是第一个元素
    int max=*p;
    for (int i=1; i<len; i++) {
        //找出最大值
        if (*(p+i)>max) {
            //找到最大值后,把最大值赋值给max
            max = *(p+i);
        }
    }
   
    return max;
}


int main(int argc, const char * argv[]) {
    int a[10]={123,45,22,111,34,56,888,11,45,109};
    int m = getMax(a,10);
    printf("m = %d\n",m);
    return 0;
}


    函数指针变量

        存放函数的首地址的指针变量就是函数指针变量

    函数指针变量的定义

      返回值类型  (*变量名)(函数的参数);


      函数的声明:

      int sum(int a,int b);----> 函数指针 int (*p1)(int a,int b);
   
      //定义了一个函数指针 p1
      //p1可以存放 返回值是int类型,并且有两个形参,形参的类型还都是int类型的函数的地址

      //函数指针的初始化

      p1 = sum;  //sum存的就是函数在内存中的首地址


函数指针的使用实例:
#include <stdio.h>

int sum(int x,int y){
   
    return x+y;
   
}

int jian(int x,int y){
   
    return x-y;
   
}

int cheng(int x,int y){
   
    return x*y;
   
}

int chu(int x,int y){

    return x/y;

}

int main(int argc, const char * argv[]) {
   
    //函数指针的使用
    //1、定义函数指针
    int (*p)(int ,int );
    //2、给函数指针初始化
    p = sum;  //p也指向了sum函数
   
    switch (3) {
        case 1:
            p = sum;
            break;
        case 2:
            p = jian;
            break;
        case 3:
            p = cheng;
            break;
        case 4:
            p = chu;
            break;
            
        default:
            break;
    }
   
    //3、用函数指针间接的调用函数
    //     (*p)(23,45);
    int s = p(23,45);
   
   
   
    printf("%d\n",s);
   
    return 0;
}


    构造类型:

       由一个或者多个已定义类型的元素用构造的方法,构造新的类型

    构造类型:

       数组   结构体

    结构体:

       由相同类型或者不同类型的数据用构造方法,构造的类型

    结构体的定义
     
       struct 结构体名{


           成员列表;

       }; //注意此处的分号不能省



    结构体变量有定义有三种方法

    1)先定义结构体,然后在定义结构体变量

      struct Student{
        
         //学生学号
         int sno;
         //学生姓名
         char name[21];
         //学生年龄
         int age;
         //学生成绩
         float score;

      };

      //注意:
      1)结构体定义完成以后,计算机并不会给结构体分配内存空间
      2)会在定义结构体变量后,分配存储空间
  
      //结构体变量定义格式:
      struct 结构体名 结构体变量名;

      struct Student stu1;  //这句话表示定义一个Student结构体类型的变量,变量的名称是stu1;
      //stu1因为是Student类型,stu1可以存放学生的学号、姓名、年龄、成绩


      struct Student stu4,stu2,stu3;  //定义多个结构体变量


    2)定义结构体的同时,定义结构体变量

       格式:

       struct 结构体名{


       }结构体变量1,结构体变量2....;



         struct Student{
         
             //学生学号
             int sno;
             //学生姓名
             char name[21];
             //学生年龄
             int age;
             //学生成绩
             float score;
         
         }stu5,stu6,stu7; //也是用Student结构体定义了三个结构体变量
         //名称分别为 stu5,stu6,stu7
         


    3)使用匿名结构体定义结构体变量

        struct {



        }结构体变量1,结构体变量2....;

        struct {

           char *color;
           int lunzi;
           int speed;

        }car1,car2,car3;


实例讲解结构体变量中成员的访问方法:
nt main(int argc, const char * argv[]) {
   
    //定义一个Car类型的结构体
    struct Car{
   
        char *pp;
        int lunzi;
        int speed;
   
    };
   
    //用结构体类型,定义结构体变量
    struct Car car1;
    /*
      car1
     
      pp   "奥拓"
      lunzi  4
      speed 350
     
      car2
      pp   "时风"
      lunzi  3
      speed  180
     */
   
    //获取结构体变量中的成员
    // 获取品牌   car1.pp
    // 获取轮子   car1.lunzi
    // 获取速度   car1.speed
   
    //访问时风  car2.pp
   
    return 0;
}

实例讲解结构体变量的初始化:

#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[]) {
   
    struct Student{
        
        //学生学号
        int sno;
        //学生姓名
        char name[21];
        //学生年龄
        int age;
        //学生成绩
        float score;
        
    };
   
    //先定义结构体变量,然后再初始化
    struct Student stu1;  //占用字节数?
   
    //给结构体变变量初始化
    stu1.sno = 38;
    stu1.age = 18;
    stu1.score = 59.99f;
    char name1[21]="张三丰";
    //name1 = "张无忌";
    strcpy(stu1.name, "张三丰a");
   
    printf("学号:%d\n年龄:%d\n分数:%.2f\n姓名:%s\n",stu1.sno,stu1.age,stu1.score,stu1.name);
    //1、stu1.name 占用多个字节   21
    printf("stu1.name %ld\n",sizeof(stu1.name));
    //2、stu1.name 字符串长度是多少
    //汉字的编码问题
    // UTF-8  xcode中默认的中文的编码是utf-8格式
    //        国际通用编码 一个汉字占用 3个字节
    // GB2312 GBK  国标 一个汉字占用2个字节
    printf("stu1.name 长度:%ld\n",strlen(stu1.name));
   
    //stu1.name = "zbz";  //
   
   
    //2、定义结构体变量的同时,进行初始化
    //初始化值得顺序要和定义结构体的顺序一致
    struct Student stu2={8,"凤姐",18,49.99f};
    printf("\n\n学号:%d\n年龄:%d\n分数:%.2f\n姓名:%s\n",stu2.sno,stu2.age,stu2.score,stu2.name);
   
    //3、定义结构体的同时,还可以指定元素的初始化
    struct Student stu3={.name = "lady Gaga"};
    return 0;
}

计算结构体变量占用存储空间大小
/计算结构体变量在内存中占用的字节数的方法
    //1)先找对齐模数
    //  对齐模数 是结构体中的基本数据类型中占用字节数最大的那个
    //          4
    //2)在计算结构体变量的中各个成员占用的字节和

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马