为 C 指针分配十进制零


//line 2 causes the program to terminate
#include <stdio.h>
int main()
{   
 int *qi = 0;  //1 -- making qi a null pointer
 if(qi==NULL) printf("Nulln");
 else printf("Not Nulln"); 
 *qi =0; // 2  ---  assigning *qi a decimal zero value.
 return 0;
}

上述代码中的注释 2 终止程序,同时添加一行

qi =  &zero;

在上面的代码中,在注释 2 之前阻止了这一点,如下所示

// this code works fine
#include <stdio.h>
int main()
{
 int *qi = 0;  //1
 if(qi==NULL) printf("Nulln");
 else printf("Not Nulln"); 
 int zero =0;
 qi = &zero;
 *qi= zero;  //2
 printf("%dn",*qi);
 return 0;
}

为什么会这样?解释就像你在向孩子解释一样。

这很简单...整数指针指向由整数分配的内存块。空指针没有内存到点。所以通过 *qi =0;您正在引用一个实际上不存在的空位置。在第二种情况下,您将整数指针指向整数变量零,以便正常工作。

int *qi = 0;

qi是一个空指针。 你不能用空指针做太多事情。 特别是,您不能取消引用它来读取或写入:

*qi = 0; // WRONG - illegal use of a null pointer.

现在,我们执行

qi = &zero;

qi 不再是空指针,因为我们在其中存储了zero的地址。 qi指向zero .

*qi = zero; // RIGHT (but pointless)

这会将存储在 zero 中的值复制到 qi 指向的位置。 我们知道qi指向zero,所以现在这与写作相同

zero = zero;

最新更新