黑马程序员--C语言之指针<一>

6黑马程序员--C语言之指针


------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
1、指针的定义
   在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配


内存单元。编译系统会根据程序中定义的变量类型,分配一定长度的空间。内存


区的每一个字节有一个编号,这就是地址,在地址所标志的内存单元中存放的数


据,地址又可形象地成为指针,地址指向该变量单元。
  例如:指针变量访问整型变量


  #include<stdio.h>
  int main()
  {
    int a =100,b=10;
    int *p1,*p2;//定义两个指针变量
    p1=&a;p2=&b;//把a、b的地址分别赋值给p1、p2
    printf("a=%d,b=%d");
    printf("*p1=%d,*p2=%d");//输出指针变量的值
    return 0;
   }
2、定义指针变量时注意:


   1)指针变量前面的*表示该变量类型是指针类型变量;
   2)在定义指针变量时必须指定基类型;(一个变量指针的含义包括两个方面


,一是存储单元编号表示的地址,一是它指向的存储单元的数据类型)
   3)指向整形数据的指针类型表示为“int*”,读作指向int的指针,简称int


指针。
   4)指针变量中只能存放地址,不能将一个整数赋值给指针
      如;*p1=100;//这是错误的
3、指针变量的应用
   例如:输入两个数,按照先大后小的顺序输出


   #include<stdio.h>
   int main()
   {
     int *p1,*p2,*p,a,b;
     printf("请输入两个数:");
     scanf("%d,%d",&a,&b);
     p1=&a;
     p2=&b;
     if(a<b){
        p=p1;
        p1=p2;
        p2=p;
              }
     printf("a=%d,b=%d",a,b);
     printf("max=%d,min=%d,*p1,*p2");
     rerurn 0; 
     
    }
4、指针引用数组
   1)数组元素的指针就是数组元素的地址;
   2)指针指向数组元素时,可以加减一个整数用来访问同一数组中的相邻元素



   3)如果p的初值为&a[],则p+i和a+i就是数组元素a[i]。
   4)如果指针变量p1和p2都指向同一数组,如果指向p2-p1结果为p2-p1的地址


差除以数组元素的长度。
   例如:将数组a中的n个整数按相反顺序存放
   #include<stido.h>
   int main()
   {
    void inv(int*x,int n);
    int i,arr[10],*p=arr;
    printf("排序之前的顺序为:");
    for(i=0;i<10;i++,p++)//输入arr数组元素
    scanf("%d",p);
    printf("\n");
    p=arr;//指针p重新指向arr[0]
    inv(p,10);//调用inv函数
    printf("排序之后的顺序为:");
    for(p=arr;p<arr+10;p++)
    printf("%d",*p);
    printf("\n");
    return 0;


    }


    void inv(int*x,int n){
    int *p,m,temp,*i,*j;
    m=(n-1)/2;
    i=x;j=x+n-1;p=x+m;
    for(;i<=p;i++,j--)
    {
      temp=*i;
      *i=*j;
      *j=temp;
      
     }
    return;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值