数组与指针分析

数组的本质

  • 数组是一段连续的内存空间
  • 数组的空间大小为sizeof(array_type)*array_size
  • 数组名可以看做指向第一个元素的常量指针

指针的运算

指针是一种特殊的变量,与整数的运算规则为
p+n; <--> (unsigned int)p + n * sizeof(*p);
结论
当指针p指向一个同类型的数组的元素时,p+1将指向当前元素的下一个元素;p-1将指向当前元素的上一个元素。

指针之间只支持减法运算,参与减法运算的指针类型必须相同,
注意

  • 只有当两个指针指向同一个数组中的元素时,指针相减才有意义,其意义为指针所指元素的下标差
  • 当两个指针指向的元素不在同一个数组中时,结果未定义

例子1:指针运算的应用

#include <stdio.h>  
  
#define DIM(a) (sizeof(a) / sizeof(*a))  
  
int main()  
{  
    char s[] = {'H', 'e', 'l', 'l', 'o'};  
    char* pBegin = s;  
    char* pEnd = s + DIM(s); // Key point  
    char* p = NULL;  
      
    printf("pBegin = %p\n", pBegin);  
    printf("pEnd = %p\n", pEnd);  
      
    printf("Size: %d\n", pEnd - pBegin);  
      
    for(p=pBegin; p<pEnd; p++)  
    {  
        printf("%c", *p);  
    }  
      
    printf("\n");  
     
    return 0;  
}  

指针的比较

  • 指针也可以进行关系比较(<,>,<=,>=)
  • 指针关系运算的前提是同时指向同一个数组中的元素
  • 任意两个指针之间的比较运算(==,=!)无限制
  • 参与比较运算的指针类型必须相同

小结

  • 数组声明时编译器自动分配一片连续的内存空间
  • 指针声明时只分配了用于容纳地址值的4字节空间
  • 指针和整数可以进行运算,结果为指针
  • 指针之间支持减法运算,其结果为数组元素下标差
  • 指针之间支持比较运算,其类型必须相同

转载于:https://www.cnblogs.com/yanyun888/p/9213166.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值