将十进制零分配给 C 指针
Assigning decimal zero to a C pointer
//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("Null\n");
else printf("Not Null\n");
*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("Null\n");
else printf("Not Null\n");
int zero =0;
qi = &zero;
*qi= zero; //2
printf("%d\n",*qi);
return 0;
}
为什么会这样?解释起来就好像你在向 child 解释一样。
很简单...一个整数指针指向由一个整数分配的内存块。空指针没有指向的内存。所以通过 *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;
//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("Null\n");
else printf("Not Null\n");
*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("Null\n");
else printf("Not Null\n");
int zero =0;
qi = &zero;
*qi= zero; //2
printf("%d\n",*qi);
return 0;
}
为什么会这样?解释起来就好像你在向 child 解释一样。
很简单...一个整数指针指向由一个整数分配的内存块。空指针没有指向的内存。所以通过 *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;