c - 双指针和单指针的地址递增
问题描述
当指向指针变量(双指针)的指针在初始化后递增时,如果我们访问它的值会给出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;
}
输出:垃圾值
解决方案
当您将指针加一时,它将指向下一个内存地址,在本例中为原始地址“右侧”的 4 个字节。那里可能有一个值,或者可能存在绝对垃圾,或者您正在运行的程序不允许读取该地址。您事先无法知道这一点,因此您会得到相当不确定的行为。