假设我有两个用于创建 10 个元素的整数数组的代码示例:
int *pi = (int*)0;
realloc(pi,10);
另一种是正常写法,即:
int *pi;
pi= malloc(10*sizeof(int));
现在,我的问题是:第一种赋值是合法的,但没有被使用。为什么,虽然我可以在那里得到我选择的起始位置?
用常量初始化指针是合法的,但不被使用。为什么?
When NULL
已通过,realloc
相当于malloc
. The NULL
如果您在某种循环中重新分配并且不希望在第一次分配时出现特殊情况,则 call 可能会很有用。
当我们这样做时,使用 malloc 和 realloc 的相当标准的方法是:
int* p;
p = malloc(10 * sizeof(int)); //Note that there's no cast
//(also, it could just be int* p = malloc(...);)
int* np = realloc(p, 15 * sizeof(int));
//Note that you keep the old pointer -- this is in case the realloc fails
顺便说一句:历史是您在不同行看到声明和赋值的主要原因。在旧版本的 C 中,声明必须放在函数的前面。这意味着即使您的函数直到 20 行才使用变量,您也必须在顶部声明。
由于您通常不知道未用于另外 20 行的变量的值应该是什么,因此您不能总是将其初始化为任何有意义的值,因此您只剩下一个声明,并且在您的顶部没有赋值。功能。
在 C99/C11 中,不必在作用域顶部声明变量。事实上,通常建议定义变量尽可能接近其用途。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)