美文网首页
2016.9.30 C语言课堂笔记--(指针)

2016.9.30 C语言课堂笔记--(指针)

作者: I踏雪寻梅 | 来源:发表于2016-10-09 19:21 被阅读0次

    C语言笔记

    指针

    1. int p; (这时候代表后面的是地址变量)

    2. p=5,p表示p只向村存储的地址单元

      • 指针变量就是地址变量
      • 指针变量的定义:

      int a=8;

      int *p;

      p(地址变量)=&a(地址常量);

      • 指针变量的初始化:

      int a;

      int *p=&a;

      • 通过指针变量访问内容

        p<===>(&a)<===>a;

        int a=8;
        //int*代表p是一个地址变量 
        int *p=&a;
        //*这个是取P所代表的地址单元
        *p=9;
        printf("a=%d\n",a);
    
        printf("*p=%d\n",*p);
        printf("&a=%p\n",&a);
        printf("p=%p\n",p);
        printf("&p=%p\n",&p);//a=9,*p=9,&a=p=0x7fffdd706b64,&p=0x7fffdd706b68
    
    • 数组与指针、
      数组名就是首元素的地址

      a<===>&a[0]

      a+i<===>&a[i]

      int *p=&a[0]

      p=&a[0]=a

      p+i=&a[i]

      *(p+i)=&a[i]=p[i]

      • 如果想同时定义两个指针变量:
      int a[5]={1,2,3,4,5}; 
      int i,j=0;
      int *p=a;
      *p=a[0];
      for (i=0;i<3;i++)
      {
          j=p[i];
          p[i]=p[4-i];
          p[4-i]=j;
      } 
      for (i=0;i<5;i++)
      {
          printf("%d",a[i]);
      }
      return 0;
      
      int a=2,b=3,temp;
      int *p=&a,*q=&b;
      temp=*p;
      *p=*q;
      *q=temp;
      printf("%d",a);
      printf("%d",b);
      
      
    • 只读变量const:如果用一个const关键字去修饰一个变量,标志着这个变量只读,不可更改。

      • const int a=9;

      • int const a=9//都不可改

      • int a=9;

        int const

        p=&a;(代表不能用P去改p所指向的存储单元里的值)

        *p=8为非法操作

      • int a,b;
        int * const p=&a;代表p一旦指向一个变量移后,就不能改变p的指向
        p=&b;非法操作

    • 一维数组与指针的关系

      • int arr[5]

      • int *p=arr

      • 数组名就相当于首元素的地址

      • 第i个元素地址访问方法

        p+i<===>&p[i]<===>arr+i<===>&arr[i]

      • 第i个元素数值访问方法

        (p+i)<===>p[i]<===>(arr+i)<===>arr[i]

      • arr 实际上int const - *arr;表明arr永远指向第一个元素,不能更改,就是说arr++非法

      • p++合法

    • 函数

      • 什么时候想到用函数
      1. 功能相同,而且这个功能需要使用多次
      2. 函数里的代码尽量不要超过50 行
      • 怎么定义函数

        数据类型+函数名(形式参数列表)
        {

        }
        1. 数据类型有:int、float、double、char、void(空类型)
    - 函数定义注意点
        1. 函数定义不允许放在主函数内部
        2. 函数定义必须放在使用之前,如果函数定义没有放在主函数之前,解决方法如下:
            - 将函数声明写在函数声明之前
            - 形参:
                1. 形式上的参数,没有实际意义。
                2. 函数定义的时候,函数名()里面的参数叫形式参数
                3. 形参在指定时要指定每一个参数的数据类型,不能省略。比如:
                
                    void sum(int a,b)这种形式参数非法。
            - 实参:
                1. 有实际意义的参数,参数里面是有确定值的。
                2. 函数使用的时候,函数名()里的参数。
            - 实参的数量必须要与形参一致。
    - return 的注意点:
        - return是整个函数结束的标志
        - 是将信息返回给函数调用者使用的
    - return 使用注意点:
        - void类型的函数结束时可以没有return,也可以有return。如果有return,return后面没有值。
        - 如果是非void类型的(int,char....)函数,函数结束时必须要有return,而且return后面必须要有值,值得数据类型与函数定义类型必须保持一致。
        - 传参返回永远都是数值
    

    //使用函数,输入一个年份输入一个月份查询日历
    1990.1.1day1之后开始查询。

    (year%4==0&&year%100!=0)||(year%400==0)
    计算1990.1.1到2016.8.31所有的天数

    #include "stdio.h"
    void leap(int *year,int *f,int *count);
    void print(int day,int mouth,int f);
    //int day_count(int *year,int *count);
    //int day_count(int *year,int *f,int *count,int *mouth);
    int main()
    {
        
        int day,year,f,fate,count=0,mouth,m=0,i;
        int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
        int b[12]={31,29,31,30,31,30,31,31,30,31,30,31};
        printf("请输入一个年数");
         scanf("%d",&year);
         getchar();
         printf("请输入一个月份");
         scanf("%d",&mouth);
         leap(&year,&f,&count);  
    //   day_count(&year,&f,&count,&mouth);
        if(f==1)
         {
             for(i=0;i<mouth-1;i++)
                m=m+b[i];
            printf("该年是闰年\n");
         }
         if(f==0)
         {
             for(i=0;i<mouth-1;i++)
                m=m+a[i];
            printf("该年不是闰年\n");
         }
         day=(year-1990)*365+count+m;
         printf("count的值为%d\n",count);
         printf("f的值为%d\n",f);
         printf("总天数为%d\n",day);
         print(day,mouth,f);
         return 0;
    }
    void print(int day,int mouth,int f)
    {
        int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
        int b[12]={31,29,31,30,31,30,31,31,30,31,30,31};
        int last_num,s,i,j=0,t=0;
        last_num=day%7;
        if (f==0)
            s=a[mouth-1];
        if (f==1)
            s=b[mouth-1];
        
        printf("\n日 一 二 三 四 五 六\n");
        
        for (i=1;i<=last_num+1;i++)
        {
            printf("   ");
        }
        for (i=last_num;i<6;i++)
        {
            j++;
            printf("%02d ",j);
            if(i==5)
                printf("\n");
        }
        for (i=6-last_num+1;i<=s;i++)
        {
            t++;
            printf("%02d ",i);
            if(t%7==0)
                printf("\n");
        }
    //  for (i=1;i<=s;i++)
    //  {
    //      if (i%7==0)
    //          printf("\n");
    //      printf("%02d ",i);
    //  }
        printf("\n上月最后一天为星期%d\n",last_num);
        printf("本月天数为%d\n",s);
    }
    /*
    int day_count(int *year,int *f,int *count,int *mouth)
    {
    
        int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
        int b[12]={31,29,31,30,31,30,31,31,30,31,30,31};
        int day,m=0,i;
         leap(&year,&f,&count);  
        if(*f==1)
         {
             for(i=0;i<*mouth-1;i++)
                m=m+b[i];
            printf("该年是闰年\n");
         }
         if(*f==0)
         {
             for(i=0;i<*mouth-1;i++)
                m=m+a[i];
            printf("该年不是闰年\n");
         }
         day=(*year-1990)*365+*count+m;
         return day;
    }*/
    /*int day_count(int *year,int *count)
    {
         leap(&year,&f,&count);
        int day=(*year-1990)*365+*count;
        return day;
    }*/
    void leap(int *year,int *f,int *count)
    {
        int i;
        for(i=1990;i<*year;i++)
        {
            if (((i%4==0&&i%100!=0)||(i%400==0))==1)
            {
                *count=*count+1;        
            }
        }
    //   printf("%d\n",*count);
        if (((*year%4==0&&*year%100!=0)||(*year%400==0))==1)    
            *f=1;
        else 
            *f=0;   
    }
    

    相关文章

      网友评论

          本文标题:2016.9.30 C语言课堂笔记--(指针)

          本文链接:https://www.haomeiwen.com/subject/qecmyttx.html