指针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
 

转载于:https://www.cnblogs.com/gstblog/p/3675602.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值