这可能很明显,但是,一个空指针能安全地指向另一个指针吗?即指向int *类型
int i = 5;
int *ip = &i;
void *vp = &ip;
int *nip = *(int **)vp;
int ni = *nip; // == 5?
编辑:对不起,也许我不清楚,我想知道一个空指针是否可以指向具有另一个指针类型的内存段,而不是一个空**。只是空虚*
我想了解一下空值或空引用。
例如,我有一个名为Apple的类,我创建了一个它的实例。
Apple myApple = new Apple("yummy"); // The data is stored in memory
然后我吃了那个苹果,现在它需要是空的,所以我把它设置为空。
myApple = null;
打完这个电话后,我忘了吃了,现在想检查一下。
bool isEaten = (myApple == null);
有了这个调用,myApple在哪里引用?null是一个特殊的指针值吗?如果是这样的话,如果我有1000个空对象,如果我们认为指针类型为int,那么它们是占用
在C编程语言中,有没有可能在不进行类型转换的情况下取消引用空指针?
另外,有没有什么方法可以泛化一个函数,它可以接收一个指针,并将它存储在一个空指针中,通过使用这个空指针,我们可以生成一个广义函数吗?
例如:
void abc(void *a, int b)
{
if(b==1)
printf("%d",*(int*)a); // If integer pointer is received
else if(b==2)
printf("%c",*(char*)a); // If character pointe
为什么我对此感到有点困惑:
std::shared_ptr可以是空的,std::shared_ptr可以指向null,这两个概念并不等价。
空shared_ptr可以存储一个非空值,存储空值的shared_ptr可以有一个正的参考计数。
我现在想知道的是,如何在std::dynamic_pointer_cast之后正确地测试演员阵容是否成功?docs 状态:
3-4) dynamic_cast<Y*>(r.get()) (If the result of the dynamic_cast is a null pointer value, the returned shared_pt
正如所说,有些体系结构中的空指针并不都是零位。所以问题是,究竟是什么在检查下面的结构:
void* p = get_some_pointer();
if (!p)
return;
我是将p与机器相关的空指针进行比较,还是将p与算术零比较?
我应该写信吗?
void* p = get_some_pointer();
if (NULL == p)
return;
取而代之的是为这样的建筑做好准备,还是这只是我的妄想?
SQL的约定是在不存在时将字段保留为null。
在Mongo中是否有将字段保留为null的约定,或者在未设置字段时使用空值(例如空数组)?
具体来说,我在中使用Go和MONGO4.2。
例如,
type A struct {
ID string `bson:"_id"`
Bs []B `bson:"bs"`
}
type B struct {
ID string `bson:"_id"`
}
如果一个A没有任何Bs (Bs是空的),那么应该将它定义为零值([]B(nil))还是空数组([]B{})。
注意,这会影响数据
例如,当声明一个malloc,然后检查它是否为空以查看它是否被正确分配时,如果它为空,我是否应该释放内存,例如: int *p;
p = (int *)malloc(sizeof(int));
if (p == NULL)
{
free(p); //Should I free here or will it create an error?
return NULL;
}
理查德·里斯( Richard )著的“理解和使用C指针”一书说:
空概念是空指针常量支持的抽象。这个常数可能是,也可能不是常数零。C程序员不需要关心他们的实际内部表示。
我的问题是,既然“这个常数可能是或可能不是常数零”,那么在我的代码中这样做对我来说安全吗?
int *ptr = NULL;
// Some code which probably sets ptr to a valid memory address
if(!ptr)
{
ERROR();
}
如果NULL不是0,则If子句有可能计算为true。
我知道对于空指针是不允许指针算术的。但想象一下我有这样的东西:
class MyArray {
int *arrayBegin; // pointer to the first array item, NULL for an empty array
unsigned arraySize; // size of the array, zero for an empty array
public:
int *begin() const { return arrayBegin; }
int *end() const { return arrayBegin + arraySize
我在编译器中遇到了一个警告:“地址永远不会为空”。
代码看起来像:
struct mydata * var = NULL;
/* some function which may modify var*/
if(NULL != &var) {
// do something
}
实际警告(-Werror标记):
error: the comparison will always evaluate as 'true' for the address of 'var' will never be NULL [-Werror=address]
那么这是否
下面是我所做的:我有一个简单的类:
class Person{
public:
Person();
}
And in my main:
int main() {
Person myPer = NULL;
}
然而,这是不可能的,因为C++不允许这样做:
int main() {
Person* perPtr = NULL;
Person myPer = *perPtr; // corrected, it was &perPtr(typo error) before answers
}
这段代码编译得很好,正如我所看到的,我确实能够拥有一个空对象。那么,在C+