在c中,当定义类似的变量时int a; int* b;
,将在堆栈中分配内存。使用malloc时,将使用堆内存。
我的问题是,是否在以下函数中:
void* function () {
int counter = 0;
while() {
... does some counting
counter++;
}
return (void *) counter;
}
它正在返回一个指向计数器的指针,计数器的内存在哪里?代码段?
它没有返回的指针counter
。那将是&counter
,这是指向局部变量的指针。这样做将是一个错误,因为一旦函数返回,局部变量就会被销毁,因此调用者将得到一个指向不再存在的对象的指针。
在实践中,counter
可能存在于堆栈中或一个寄存器(或多个寄存器)中。该代码段通常是只读的,因此变量不能存在于此。
(void *)counter
正在将数字转换为指针值。该操作的结果是实现定义的。
例如,使用gcc:
如果指针表示形式小于整数类型,则从整数到指针的转换将丢弃最高有效位,如果指针表示形式大于整数类型,则将根据整数类型的有符号性进行扩展,否则这些位不变。
结果地址可能根本不是有效的指针值,或者它可能指向未映射的页面。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句