正如所说,有些体系结构中的空指针并不都是零位。所以问题是,究竟是什么在检查下面的结构:
void* p = get_some_pointer();
if (!p)
return;
我是将p与机器相关的空指针进行比较,还是将p与算术零比较?
我应该写信吗?
void* p = get_some_pointer();
if (NULL == p)
return;
取而代之的是为这样的建筑做好准备,还是这只是我的妄想?
在阅读时,我可以看到这一点:
我们传递给释放的指针不能为null;它必须指向通过分配的内存。
我检查了deallocate的来源,发现如下:
// __p is not permitted to be a null pointer.
void
deallocate(pointer __p, size_type)
{ ::operator delete(__p); }
好的,所以我知道delete表达式和operator delete()之间有区别。delete表达式可用于空指针。但是,该函数直接调用全局operator delete()函数。但是,我搜索了这个问题,并找到了一个博客文章
在我的一个程序中,我得到了一个错误
invalid conversion from 'void* (*)()' to 'void*' [-fpermissive]
我正在尝试理解这两种数据类型之间的区别。这非常令人困惑。
我认为这些数据类型是:
所以这个数据类型是一个指向一个空(void*)的指针,这个空也有另一个指针((*)),并且由于某种奇怪的原因,它有空括号。所以我想这种数据类型的内存应该是|--void address--|--pointer of unknown type--|--something denoting no arguments--|
然
int main()
{
int a;
void *p;
p = &a;
printf("%ld\n",(long)p);
p = p+1;
printf("%ld\n",(long)p);
}
在这个程序中,p+1只是将p的值递增1。我知道void pointer arithmetic在C中是不可能的,所以GCC隐式地执行了。如果是,那么它是否将其视为char pointer。另外,为什么dereferencing不能用于空指针,如果它隐式地执行指针运算。
所以我计划写一个函数来返回一个随机数组元素。函数接受两个参数-一个无效指针数组和数组长度。它应该返回一个空指针。其思想是采用给定的数组,它以空指针数组的形式出现,函数将返回数组的一个随机元素。我的问题是,我需要做什么来返回一个指针,我需要对“结果”做什么,这样我就可以这样返回它?在病房之后,我需要做些什么才能再次访问它?谢谢
这是我所做的,但我得到的是:
"25: error: invalid use of void expression"
警告如下:
" warning: pointer of type ‘void *’ used in arithmetic"
最近我遇到了一个奇怪的代码片段。它是用C编写的内存池代码的一部分,当然,它主要使用地址算法。
忽略了多余的细节,我添加了一些注释,而不是它们:
void *head;
/* some memory allocation stuff, including assigning allocated memory address to head */
/* allocating some memory pages */
/* OK, now allocation stuff is finished. head pointer still contains valid address */
he
我几乎已经完成了我的C初级+的书,我即将击中结构和工会,等等.等等.但是我还没有完全掌握关键字void到底是什么。空虚是做什么的?它怎麽工作?我什么时候该用它?
我明白
void function(void)
基本上是说没有返回值。没有争论。我知道你可以使用不同的场景,
int function(void); //has a return of type int -- voids args
void function(int); //voids return type -- takes type int as an arg
我也明白
void * p = 0L;
是有效的代码,它基本上是一个指
在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
可以交换两个空指针的内容吗?我尝试通过取消引用两个指针来交换值:
void* a = (void*)50;
void* b = (void*)90;
*a = *b;
但是,最后一行会抛出一个错误,因为不可能取消对一个空指针的引用。
我认为,可以先将b的值转换为int,然后将其转换回空*如下所示:
void* a = (void*)50;
void* b = (void*)90;
int value = (int)b;
a = (void*)value; //a now equals b
不幸的是,这要求我们知道a和b类型应该是什么(我不知道这样的描述是否正确),在这种情况下,它们是in。是