微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我是指针指针概念的新手,因为我正在学习如何使用指针指针的递增

如何解决我是指针指针概念的新手,因为我正在学习如何使用指针指针的递增

为什么当我像这样递增 **pptr++ 而不是 *ptr++ 时,我会得到一些垃圾值?有人可以帮我吗?

#include<stdio.h>
int main()
{
    static int array[] ={9,1,2,3,4}; 

    int *ptr = array;
    int **pptr = &ptr;


    **pptr++;
    printf("%d",**pptr );

    *ptr++;
    printf("%d",*ptr );

    return 0;
}

解决方法

**pptr++;*ptr++; 递增指针,而不是它们指向的内容。

pptr 指向 ptr,可以看作是单元素数组。递增 pptr 会将指针移到超出范围并禁止取消引用。

ptr 指向 5 元素数组 array 的第一个元素。递增 ptr 将移动指针指向第二个元素。您仍然可以取消引用它。

,

由于这些声明,指针pptr指向指针(对象)ptr

int *ptr = array;
int **pptr = &ptr;

这个表达

**pptr++;

可以像这样重写

pptr++;

因为应用解引用运算符没有效果。

所以现在递增 pptr 后的指针指向指针 ptr 之外的内存并在以下语句中取消引用

printf("%d",**pptr );

导致未定义的行为。

代替这两个语句

**pptr++;
printf("%d",**pptr );

你可以只写一个语句

printf("%d",**pptr++ );

输出将是

9

虽然后递增指针没有意义。

至于这些陈述

*ptr++;
printf("%d",*ptr );

然后又可以像这样重写

ptr++;
printf("%d",*ptr );

因为取消引用此表达式 *ptr++ 中的指针没有效果。

当指针 ptr 指向数组 array 的第一个元素时,它在递增后指向数组的第二个元素。

因此这个电话

printf("%d",*ptr );

输出

1

为了更清楚,你可以考虑这个声明

int **pptr = &ptr;

作为指向只有单个元素的数组的第一个元素的指针的声明。因此,增加指针导致指针将指向具有单个元素的数组之外。

与指针 pptr 不同,指针 ptr 指向包含多个元素的数组的第一个元素。所以在增加指针后,它将指向一个有效的对象:数组的第二个元素。

这就是区别。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?