指针的运算有关内容,。

为什么两个同类型的指针不可以相加但是可以相减?而且两个相同类型的指针为什么可以进行比较?

指针变量的值是它指向的变量的地址;
相加的话,就不确定指向哪里了,这既没有实际意义,编译器也不允许这样。
而相减,通常用来计算同一数组中两个元素的距离,这是有实际意义的。
如果两个指针指向相同类型的对象,则可以比较两个指针的值,比如判断2个指针是否指向同一个对象。

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/332977
  • 这篇博客也不错, 你可以看下题目8  假定两个带头节点的单链表,保存单词,后缀相同时共享相同空间,找出共同后缀的起始位置。
  • 除此之外, 这篇博客: 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示,,,中的 题目介绍 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

    您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    示例:

    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
    输出:7 -> 0 -> 8
    原因:342 + 465 = 807

  • 以下回答由chatgpt基于相关博客总结生成:

    回答:

    指针在 C/C++ 中是一个非常重要的概念,指针可以用来访问内存中的数据,所以指针在编程中的应用非常广泛。在 C/C++ 中,指针运算是一种特殊的运算,它不同于其他算术运算,主要体现在两个方面:一是指针相加操作是不被允许的,但是指针相减是被允许的;二是相同类型的指针可以进行比较。

    为什么不允许两个指针相加呢?

    指针在 C/C++ 中的作用是指向内存中的数据,它们通常被称为“地址”。每个地址处都有一个对应的数据类型。例如,如果有一个 int 类型的变量,那么它会占用四个字节的内存空间,所以它的地址就是一个指向四个字节的内存空间的指针。C/C++ 中的指针加法是按照数据类型来进行计算的,即将指针加上 n 个某种类型的变量所占据的字节数,就可以访问内存中距离该地址 n 个某种类型变量所占据的字节数的位置。但是,在 C/C++ 中,两个指针相加所得到的结果并不能确定一个地址,因为在两个指针之间可能存在不可访问的内存空间。

    为什么允许两个指针相减呢?

    指针相减所得到的结果是两个指针之间地址的距离,这个距离的单位是根据指针类型的大小来确定的。例如,如果是 char* 类型的指针相减,那么结果就是两个指针之间的字节数。可以使用指针相减来计算数组元素之间的偏移量,或者计算一个指针指向的内存块的大小。

    为什么相同类型的指针可以进行比较呢?

    在 C/C++ 中,相同类型的指针可以进行比较,比较操作是比较指针所指向的内存地址的大小。指针所指向的内存地址是唯一的,每个地址都可以对应到内存中的一个具体位置,所以比较两个指针所指向的地址大小是有意义的。

    指针运算的实现和规则

    指针从本质上来讲是一种特殊的数据类型,它存储的是内存地址,由于内存地址是连续的,所以指针可以使用加法和减法进行运算。指针的加法运算实际上是根据所指向的数据类型的大小来计算的,例如,如果一个指针 p 指向 char 类型的数据,那么 p+1 就是指向 p 所指向的 char 变量后面紧挨着的 char 变量。

    指针的比较运算实际上是比较它们所指向的内存地址的大小,如果一个指针所指向的内存地址比另一个指针所指向的内存地址大,那么它们之间的差值就是正数,反之则为负数。如果两个指针所指向的内存地址相同,那么它们之间的差值为 0。

    需要注意的一点是,在进行指针运算之前,必须要确保该指针指向的内存空间是有效的,否则就会出现未定义行为。此外,在进行指针加减运算时,还要注意指针指向的数据类型的大小,以免出现错误的偏移量。

    参考资料:

    无。