zoukankan      html  css  js  c++  java
  • C语言:指针运算

    指针加上一个整数的结果是另一个指针。问题是:它指向哪里?

    如果将一个字符指针加1,运算结果产生的指针指向内存中的下一个字符。

    float占据的内存空间不止1个字节,如果将一个指向float的指针加1,将会发生什么?

    它会不会指向该float值内部的某个字节呢?

    幸运的是,答案是否定的。当一个指针和一个整数量执行算法运算时,整数在执行加法运算之前始终会根据合适的大小进行调整。这个“合适的大小”就是指针所指向型的大小,“调整”就是把整数值和“合适的大小”相乘。例如:某台机器上,float占4个字节。在运算float型指针加3的表达式时,这个3将根据float类型的大小(此例中为4)进行调整(相乘)。这样实际加到指针上的整数值为12。

    把3与指针相加使指针的值增加3个float的大小,而不是3个字节。

    指针运算分为算术运算和关系运算。

    算术运算只限于两个形式。

    第1种形式是:

    指针 ± 整数

    标准定义这种形式只能用于指向数组中某个元素的指针。

    这类表达式的结果类型也是指针。

    数组中的元素存储于连续的内存位置中,后面元素的地址大于前面元素的地址。,因此,对一个指针加1使它指向数组中下一个元素,加5使它向右移动5个元素的位置,以此类推。把一个指针减去3使它向左移动3个元素的位置。

    要注意的是,如果进行完加法或者减法运算后,指针指向的位置不在数组的范围内,则发生了数组越界。对这个指针执行间接访问,即解引用操作可能会失败。

    第2种形式是:

    指针 - 指针

    只有当两个指针都指向同一个数组中的元素时,才允许从一个指针减去另一个指针。

    两个指针相减的结果的类型是ptrdiff_t,它是一种有符号的整数类型。减法运算的值是两个指针在内存中的距离(以数组元素的长度为单位,而不是以字节为单位),因为减法运算的结果将除以数组元素类型的长度。

    如果两个指针所指向的不是同一个数组中的元素,那么它们之间相减的结果是未定义的。

     

    关系运算

    对指针执行关系运算也是有限制的。用下列关系操作符对两个指针值进行比较是有可能的:

    <   <=    >     >=

    不过前提是它们都指向同一个数组中的元素。

    当然,也可以在两个任意的指针间执行相等或者不相等测试,因为这类比较的结果和编译器选择在何处存储数据并无关系-------指针要么指向同一个地址,要么指向不同的地址。

     

    参考《C和指针》一书。

  • 相关阅读:
    零点起飞学Word与Excel高效办公实战与技巧
    C语言核心技术(原书第2版)
    完全精通Nuendo电脑音乐及音频制作:精细操作与实践指南
    1035.找出直系亲属(floyd)
    1033.继续XXX定律
    1034.寻找大富翁
    1032.ZOJ问题
    1029.魔咒词典
    1031.XXX定律
    1028.继续畅通工程
  • 原文地址:https://www.cnblogs.com/justloveyou/p/2726193.html
Copyright © 2011-2022 走看看