首页 > 解决方案 > 双指针和单指针的地址递增

问题描述

当指向指针变量(双指针)的指针在初始化后递增时,如果我们访问它的值会给出RunTime Error。而在指针变量的情况下,如果我们在递增后访问它的值会给出垃圾值。我正在努力理解这种行为的原因可能是什么?

使用双指针:

#include<stdio.h>
int main(void)
{
    int  i=10;
    int *j=&i;
    int **k=&j;
    k++;
    printf("%d ",**k);
    return 0;
}

输出:运行时错误

使用单指针:

#include<stdio.h>
int main(void)
{
    int  i=10;
    int *j=&i;
    j++;
    printf("%d ",*j);
    return 0;
}

输出:垃圾值

标签: cpointers

解决方案


当您将指针加一时,它将指向下一个内存地址,在本例中为原始地址“右侧”的 4 个字节。那里可能有一个值,或者可能存在绝对垃圾,或者您正在运行的程序不允许读取该地址。您事先无法知道这一点,因此您会得到相当不确定的行为。


推荐阅读