C代码表现奇怪(指针)

时间:2015-06-20 19:29:37

标签: c

我的C函数代码一直给我错误,我无法弄清楚什么是错误的。

int * myfunc(int a)
{
    int * newNum, i;
    i = a*a;
    *newNum = i;
    return newNum;
}

2 个答案:

答案 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