各位老哥,请问下,当想返回一个一维数组的时候,类似int arr[10]
。 好像可以有两个办法,一个是int *funcRetArr()
或者是int (*funcRetArr())[10]
。
下面两个方法,返回后都可以取到数组的内容,那他们有什么区别吗?
int *funcRetArr1(){
int *arr = NULL;
arr = (int*)malloc(10 * sizeof(int) );
if(arr == NULL){
exit(1);
}
for(int i = 0;i<10;i++){
arr[i] = i+1;
}
return arr;
}
int (*funcRetArr2())[10]{
int (*arr)[10];
arr = malloc(10 * sizeof(int) );
if(arr == NULL){
exit(1);
}
for(int i = 0;i<10;i++){
(*arr)[i] = i+2;
}
return arr;
}
第二个写法不是很正常,让人很难判断它是否正确。对于c/c++来说,指针就是一个地址,指向一片连续的内存空间,只要指针指向的内存是一样的,指针就可以一样用。
你这两个方法中,arr = malloc(10 sizeof(int) );和arr = (int)malloc(10 * sizeof(int) );其实是一样的,都是用malloc分配了大小相等的空间,所以其实两个方法返回的指针是一样的。
另外,arr[i] = i+1;和 (*arr)[i] = i+1;这两个写法是等价的,但不要用后面的写法,太晦涩难懂。