现在的位置: 首页 > 综合 > 正文

c语言指针小析以及var++和++var的区别

2018年06月06日 ⁄ 综合 ⁄ 共 1859字 ⁄ 字号 评论关闭

c语言指针小析以及var++和++var的区别

       有两个相关的运算符:(1)&:取地址运算符

                                               (2)&:指针运算符(或称“间接访问”运算符)

       设a是定义的一个int类型变量,p1,p2是两个int类型指针,如:int a;int *p1;int *p2;可以将变量a的地址赋予p1,程序如下:

             

                #include <stdio.h>

                int main()

                {

                     int a,*p1,*p2;

                     p1=&a;

                     p2=p1;

                     printf("%x\n",p1);

                     return 0;

                 }

       返回数据为:bfcbd643,是一个32位地址;需要注意的是虽然数据地址和整数没有本质上的区别,都是整数,但是两者在c语言中是不能相互赋值的,如以下程序

                #include <stdio.h>

                int main()

                    {

                          int a,*p1,*p2;

                         *p1=&a;

                          p2=p1;

                          printf("%d\n",*p1);

                          return 0;

                    }

 

       用gcc编译时提示:警告:赋值时将指针赋给整数,未作类型转换。运行时:提示:段错误(cord dumped)

       p1++;是地址加1,并不是p1指向的数据加1,这时,p1已经不再指向a,而是指向一个随机的数,验证程序如下:

                         

#include <stdio.h>

int main()

{

  int a,*p1,*p2;

  a=1;

  p1=&a;

  p2=p1;

  printf("%d\n",*p1);

  p1++;

  printf("%d\n",*p1);

  return 0;

}

       输出的结果如下:1

                                         -1079637932

        下面来比较(*p1)++和*p1++的区别:程序如下:  

#include <stdio.h>

int main()

{

  int a,*p1,*p2;

  a=1;

  p1=&a;

  p2=p1;

  printf("%d\n",*p1);

  (*p1)++;

  printf("%d\n",*p1);

  *p1++;

  printf("%d\n",*p1);

  return 0;

}

 

        输出结果如下:1

                                    2

                                    -1077241724

         说明(*p1)++相当于a++,由于++的优先级别大于*,所以*p1++相当于*(p1++)。

        另外需要说明的是:&和*两个运算符的优先级别相同,但按自右向左方向结合,所以&*p1先进行*p1的运算,它就是变量a,再执行&运算,因此,&*p1与&a相同。而*&a是先进行&a运算,得a的地址,再进行*运算。即&a所指向的变量,*&a和*p1的作用是一样的,他们等价与变量a。

        下面来分析一下(*p1)++和++(*p1)的区别,程序如下:

#include <stdio.h>

int main()

{

  int a,b,c,*p1,*p2;

  a=1;

  p1=&a;

  p2=p1;

  b=(*p1)++;

  c=++(*p1);

  printf("%d,%d,%d\n",a,b,c);

  return 0;

}

 输出结果为:3,1,3;说明用b=(*p1)++ 是先把p1指向的值赋给b,然后在对a加1的,而c=++(*p1)是先对p1指向的变量加1,然后把值赋给c。

抱歉!评论已关闭.