编程基础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!='\0';p1++,p2++)
        *p2 = *p1;
        *p2='\0';
}
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;
    }
 
posted @ 2015-03-20 20:35  #零下一度&  阅读(329)  评论(1编辑  收藏  举报