指针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
 
posted @ 2014-04-19 21:42  不说谎的匹诺曹  阅读(268)  评论(3编辑  收藏  举报