zoukankan      html  css  js  c++  java
  • 指针2

          今天,我们简单说一下指针与数组的配合使用。

          当我们声明一个数组的时候,数组被编译器认为是一个地址,即数组名指向我们声明数组时开辟的空间的开头。

          再回到指针,假如已经声明了一个数组 int a[],执行 int *p=a; 之后,指针p就指向了数组的开头,然后就可以通过指针实现对数组的操作。

          问题很自然的就来了,如果指针p指向数组开头,那么 执行 p++; 之后,p 向后移动了几个字节? 如果p一开始就指向了一个 char 型数组,又会是什么情况?

          正所谓“类型为王”(这个很重要!),既然指针p指向了一个 int 型数组,p++ 也就会自动向后移动四个字节,指向下一个操作数,如果指向 char 类型,就会向后移动一个字节。有些初学者可能会有这样的迷惑,指针的大小不是4字节吗,为什么会移动一个字节?很简单,我们应该明确指针的作用,指针有“指向”作用,指向的是具体类型的数据,所以移动的字节大小自然依据所指类型变换。

         代码:

        

     1     int i;
     2 
     3     int int_a[3]={1,2,3};
     4     char char_a[3]={'a','b','c'};
     5 
     6     int *p_int=int_a; //point to type 'int'
     7     char *p_char=char_a; //point to type 'char'
     8 
     9     for(i=0;i<3;i++)
    10     {
    11         printf("p_int:0x%x\n",p_int);
    12     
    13         p_int++;
    14     }
    15 
    16     printf("\n\n\n");
    17 
    18     for(i=0;i<3;i++)
    19     {
    20         printf("p_char:0x%x\n",p_char);
    21 
    22         p_char++;
    23     }
    View Code
     
  • 相关阅读:
    [LeetCode] 735. Asteroid Collision
    [LeetCode] 14. Longest Common Prefix
    [LeetCode] 289. Game of Life
    [LeetCode] 73. Set Matrix Zeroes
    [LeetCode] 59. Spiral Matrix II
    [LeetCode] 54. Spiral Matrix
    [LeetCode] 48. Rotate Image
    [LeetCode] 134. Gas Station
    [LeetCode] 70. Climbing Stairs
    [LeetCode] 71. Simplify Path
  • 原文地址:https://www.cnblogs.com/gstblog/p/3675602.html
Copyright © 2011-2022 走看看