关于C中指针使用的注意事项

今天在leetcode刷题时,想着用一用很久没用过的C,于是就被教育了。。

首先,在leetcode上连着出了两次编译错误,想了N久才猛然回忆起来,C中貌似是没有new的,要分配指针必须使用malloc变量,如:
int *answer=new int[2];    //错,仅适合c++
int *answer=(int*)malloc(sizeof(int)*2);     //对

然后,是在本机上做实验时的一个错误,就是在c里面,局部变量在函数体结束后生命期也结束,它的指针(即它的地址)是无效变量的地址,所以函数不能返回这种地址值,如果要返回,必须要用new或者malloc分配到的空间才行,这样即使在函数体中的指针本身已经失效,但它指向的内存空间还是存在,可以用返回值来带给父函数。如:
int* twoSum(int* nums, int numsSize, int target) {
int answer[2];
return answer;
}//错误,局部数组对应的指针无法返回

int* twoSum(int* nums, int numsSize, int target) {
int *answer=new int[2];
return answer;
}//正确,可以把这片内存地址返回,即使函数结束了,这片内存空间仍没失效
总结一句就是: 局部指针变量在函数结束后生命期也结束,但只要它指向的变量或函数或任何存储实体的生命期没有结束,函数返回的指针(地址)就是有效的

你可能感兴趣的:(C与CPP)