指针实验

心得:

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

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

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

(*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;
}

原文地址:https://www.cnblogs.com/yixiaoxia/p/11052379.html