• 指针实验


    心得:

    用指针访问内存和操纵地址.

    指针变量的定义:     (数据)类型名  *指针变量名。指针变量类型被确定后,它只能指向同类型的变量。

    定义指针变量时需要指针声明符*,但指针声明符并不是指针的组成部分。在对指针变量命名时(建议)使用其类型名的首字符作为名字。

    (*p++)<==>*(p++);

    给指针赋值是使指针和所指向变量之间建立关联的必要过程。只能将一个指针的值赋给另一个相同类型的指针。赋值前必须先定义。不能用数值作为指针变量的初值。但可以将一个指针变量初始化为一个空指针。int*p=0;0是ASCII字符null的值。

    将某个变量的地址作为函数的实参,相应的形参就是指针。调用函数不能改变实参指针变量的值,但可以改变实参指针所指向的变量的值。

    指针名是一个变量,数组名是一个常量,指针名所代表的地址是可以改变的,而数组名不能。

    指针变量p,数组名a;有p=a+1是合法的,而a=a+1是非法的。数组名可以使用指针形式,而指针变也量可以转化为数组形式。两个类型相同的指针相减表示它们之间相隔的数组元素数目。

    字符串常量实质上是一个指向该字符串首字符的一个指针常量。调用函数printf(),以%s的格式输出字符串。如果要改变数组所代表的字符串,只能改变数组元素的内容,而要改变指针所代表的字符串,通常直接改变指针的值,使它指向新的字符串。通常定义指针char*s=NULL,初值置为空。

    通过gets()函数读入一个字符串。

    拆分实数:

    /*拆分实数的整数与小数部分要求自定义一个函数void splitfloat(float x, int *inpart,flot*fracpart).
    
    其中x是被拆分的实数,*input和*facpart分别是将实数x拆分出来的整数部分与小数部分。
    
    编写主函数,并在其中调用函数splitfloat().
    
    试编写相应程序。*/
    
    
    
    #include <stdio.h>
     
    void splitfloat( float x, int *intpart, float *fracpart );
     
    int main()
    {
        float x, fracpart;
        int intpart;
        printf("Enter a number x:");
     
        scanf("%f", &x);
        splitfloat(x, &intpart, &fracpart);
        printf("intpart= %d
    ", intpart);
        printf("fracpart= %f
    ", fracpart);
     
        return 0;
    }
    void splitfloat( float x, int *intpart, float *fracpart )
    {
        *intpart = (int)x;
        *fracpart = x- (*intpart);    
    }
     

    循环右移:

    /*循环右移:有n个整数,是前面各数顺序向后移m个位置,移出的数再从开头移入。编写
    一个函数实现以上功能,在主函数中输入n个整数并输出调整后的n个数。试编写相应程序。*/
    #include<stdio.h>
    void move(int*x,int n,int m);
    int main()
    {
        int i,m,n;
        int a[80];
        printf("请输入n个整数:");
        scanf("%d",&n);
    
        printf("请输入移动的长度: ");
        scanf("%d",&m);
    
        for(i=0;i<n;i++)    
            scanf("%d",&a[i]);
        move(a,n,m);
    
        printf("输出移动后的数:");
        for(i=0;i<n;i++)
            printf("%2d",a[i]);
        printf("
    ");
        
        return 0;
       }
    void move(int*x,int n,int m)
    {
    
        int i,j,k;
    
        for(i=1;i<=m;i++){
            k=x[n-1];
            for(j=n-1;j>0;j--)
            x[j]=x[j-1];
        x[0]=k;  }
    }

    删除字符:

    /*
    6.删除字符:输入一个字符串,再输入一个字符串ch,将字符串所有的ch字符删除后输出该字符串。
    要求定义和调用函数delchar(s,c),该函数将字符串s中出现的所有c字符删除。试编写相应程序。*/
    #include<stdio.h>
    void delchar(char *s,char c);
    int main(void)
    {  
       char c;
       char s[80];
        printf("Input the string:");
       gets(s);    
    printf("Input a ch:");
       scanf("%c",&c);  
       delchar(s,c);
        printf("result: ");
       puts(s);  
         return 0;
    }
    
    void delchar(char *s,char c)
    
    {    int i,j;    i=j=0;   
         while(s[i]!='')           
         {     if(s[i]!=c)      
    
              { s[j]=s[i];     
    
                j++;  }                  
    
           i++;   }    
    
      s[j]=''; }

    字符串排序:

    /*
    7.字符串排序:输入5个字符串,按由小到大的顺序输出。试编写相应程序。*/
    #include<stdio.h>
    #include<string.h>
    int main(void)
    {
        int i,j;
        char a[5][20], t[20];
        printf ("请输入5个字符串:
    ");
        for (i = 0; i < 5; i++)
        
            scanf("%s",a[i]);
     //控制循环次数
     for (i = 1; i < 5; i++)
        {for(j=0;j<5-i;j++)
         if(strcmp(a[j],a[j+1])>0)
      {strcpy(t,a[j]);
          strcpy(a[j],a[j+1]);
       strcpy(a[j+1],t);
      }
       
          }
        
        printf("排序后:
    ");
        for (i = 0; i < 5; i++)
        printf("%s	",a[i]);
        printf("
    ");
        return 0;
    }

  • 相关阅读:
    hadoop yarn
    java 删除文件夹及其里面的文件
    scrapy 429 处理
    java 获取当前时间(年月日时分秒)
    Java测试类
    eclipse环境问题-java版本不兼容
    Java内功修炼系列一工厂模式
    Java内功修炼系列一观察者模式
    Java内功修炼系列一责任链模式
    Java内功修炼系列一拦截器
  • 原文地址:https://www.cnblogs.com/yixiaoxia/p/11052379.html
Copyright © 2020-2023  润新知