原创 指针的运算

2007-11-29 13:45 2409 6 3 分类: 软件与OS

  char a[20];
  int *ptr=a;
  ptr++;
  指针ptr 的类型是int*,它指向的类型是int,它被初始化为指向整形变量a。接下
来的第3 句中,指针ptr 被加了1,编译器是这样处理的:它把指针ptr 的值加上了sizeof(int)却sizeof(指向的类型),在32 位程序中,是被加上了4。由于地址是用字节做单位的,故ptr 所指向的地址由原来的变量a 的地址向高地址方向增加了4 个字节。
由于char 类型的长度是一个字节,所以,原来ptr 是指向数组a 的第0 号单元开始的四个字节,此时指向了数组a 中从第4 号单元开始的四个字节。
     char a[40];
  int *ptr=a;
  ptr+=5;
      ptr 被加上了5,编译器是这样处理的:将指针ptr 的值加上5 乘sizeof(int),在32 位程序中就是加上了5 乘4=20。由于地址的单位是字节,故现在的ptr 所指向的地址
比起加5 后的ptr 所指向的地址来说,向高地址方向移动了20 个字节.


      int a="12";
      int b;
      int *p;
      int **ptr;
     p=&a;//&a 的结果是一个指针,类型是int*,指向的类型是int,指向的地址是a 的地址。
    *p=24;//*p 的结果,在这里它的类型是int,它所占用的地址是p 所指向的地址,显然,*p就是变量a。
    ptr=&p;//&p 的结果是个指针,该指针的类型是p 的类型加个*,在这里是int**。该指针所指向的类型是p 的类型,这里是int*。该指针所指向的地址就是指针p 自己的地址。
   *ptr=&b;//*ptr 是个指针,&b 的结果也是个指针,且这两个指针的类型和所指向的类型是一样的.   **ptr=34;//*ptr 的结果是ptr 所指向的东西,在这里是一个指针,对这个指针再做一次*运算,结果就是一个int 类型的变量。

文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /2 下一条