我的C函数代码一直给我错误,我无法弄清楚什么是错误的。
int * myfunc(int a)
{
int * newNum, i;
i = a*a;
*newNum = i;
return newNum;
}
答案 0 :(得分:2)
有三种类型的内存或变量,如功能中的自动,静态和手动。范围持续时自动持续。静态就是你用静态声明它:
static int i;
它在节目活着的时候生活。像全局变量一样。最后手动使用malloc并自由分配和释放内存。当然,您希望在返回之前将变量的地址分配给指针,如下所示:
int * newPointer = &i;
如果变量是静态的,它将通过函数调用保持值。 代码通过将局部变量的地址分配给指针避免了编译器关于返回局部变量地址的警告,因此在Lint或Splint上运行某种工具可能是个好主意,这里讨论的是tools
答案 1 :(得分:1)
看,newNum
是指针到整数。因此newNum
的目的是保留任何整数的address
。
宣布
时int * newNum;
然后 newNum
指向一些垃圾。
以下几行,
*newNum = i;
表示newNum
的内容将由i
更新。但是你忘记了,newNum
拥有一些垃圾地址吗?因此,i
的值被分配了一些垃圾location
。
你可以试试这个:
/**
* The following function will take an integer pointer from the caller.
* Its callers duty to check whether the pointer is initialed or not.
*/
void myfunc(int * newNum) {
// the content of the newNum pointer points will be updated
// as the memory address is sent here, we need not to return anything
*newNum = (*newNum) * (*newNum);
}
int main() {
int someInteger = 4;
int *ptr = &someInteger;
myfunc(ptr);
printf("Content of the pointer: %d", *ptr);
return 0;
}
您将获得类似的输出
指针内容:16