zoukankan      html  css  js  c++  java
  • 编程基础C—— 详谈指针的定义与应用以及指针与数组的关系

    指针的定义:
    一个变量的地址称为这个变量的 指针。
     
    指针的使用:
    当一个函数需要返回一个以上的运算结果时,必须用指针。
    需要改变实参的值时可以用指针;
     
    定义指针变量的一般形式:类型修饰符   * 变量名;
     
    与普通变量不同的是,在定义指针变量时,在变量前加 * 。
     
    例:
    (1)
            int *a;
            int b=10;           int * a=10;  是错误的 !
            a=&b;(相当于a=10)
    (2)
            int b=10;
            int *p=&b;
           *p=20;给指针指向的变量进行赋值(相当于b=20)
            int c=*p;取出指针指向的变量的值;
            结果 b=20;c=20;
    注意:
    在指针变量没有指向确定地址之前,不要对它所指的内容赋值。
    初始化之后,指针名如果带*号,表示的是指针指向的变量值,不带*号,表示的是地址。
     
    printf(“p=%p  b=%p”,p,&b)打印地址。打印的是p中存放的b的地址。
     
    应用实例:
    1、用指针实现冒泡排序:
    #include <stdio.h>
    void fun(int *a)
    {
                for (int i=0;i<4;i++)
            {
              for(int j=0;j<4-i;j++)
                if(*(a+j)>*(a+j+1))
                {int t;t=*(a+j);*(a+j)=*(a+j+1);*(a+j+1)=t;}
            }
        printf("排序之后:");
        for(int i=0;i<5;i++)
            printf("%d ",a[i]);
    }
    int main(int argc, const char * argv[])
    {
        int a[5]={1,2,3,6,5};
        fun(a);
        return 0;
     }
     
    2、编写一个C程序,输入三个数字,然后按照从小到大输出,要求使用指针实现
    #include <stdio.h>
    int main(int argc, const char * argv[])
    {
        int d,e,f;
        int *a,*b,*c;
        a=&d;
        b=&e;
        c=&f;
        printf("请输入三个数据:");
        scanf("%d%d%d",&d,&e,&f);
        int sum = d+e+f;
        *a=(*a>*b?*a:*b)>*c?(*a>*b?*a:*b):*c;
        *c=(*a<*b?*a:*b)<*c?(*a<*b?*a:*b):*c;
        *b=sum-(*a+*c);
        printf("从小到大的顺序为:%d %d %d",f,e,d);
        return 0;
     }
    3.用指针实现字符串的复制(拷贝);
    第一种:字符串整体复制
    #include <stdio.h>
    int main(int argc, const char * argv[])
    {
        char *a="shang cheng.";
        char *b;
        b=a;
        puts(a);
        printf("b=%s",b);
        return 0;
    }
    第二种:单个字符复制
    #include <stdio.h>
    void capy(char a[],char b[],char *p1,char *p2)
    {
        for(;*p1!='';p1++,p2++)
            *p2 = *p1;
            *p2='';
    }
    int main(int argc, const char * argv[])
    {
        char *p1,*p2;
        char *a="shang cheng.";
        char b[100];
        p1=a;
        p2=b;
        capy(a, b, p1, p2);
        puts(b);
        return 0;
        }
     
    感谢您的访问! 若对您有帮助或有兴趣请关注博客:http://www.cnblogs.com/Rong-Shengcom/
  • 相关阅读:
    day 22 反射,双下方法
    day 21 封装,多态,类的其他属性
    day 20 类与类之间的关系,继承2
    day 19 类的名称空间,组合,派生
    day 18 类,对象
    day 17 re模块
    注意NULL
    SQL_DISTINCT
    重载赋值运算符
    随机序列问题
  • 原文地址:https://www.cnblogs.com/Rong-Shengcom/p/4931302.html
Copyright © 2011-2022 走看看