函数返回一个普通指针和数组指针有什么区别呢?

各位老哥,请问下,当想返回一个一维数组的时候,类似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;
}
阅读 2.6k
2 个回答

第二个写法不是很正常,让人很难判断它是否正确。对于c/c++来说,指针就是一个地址,指向一片连续的内存空间,只要指针指向的内存是一样的,指针就可以一样用。

你这两个方法中,arr = malloc(10 sizeof(int) );和arr = (int)malloc(10 * sizeof(int) );其实是一样的,都是用malloc分配了大小相等的空间,所以其实两个方法返回的指针是一样的。

另外,arr[i] = i+1;和 (*arr)[i] = i+1;这两个写法是等价的,但不要用后面的写法,太晦涩难懂。

你自己已经说了,一个是普通指针(指向int),一个是数组指针(指向int[10]),不一样的呀。你是怎么让它们“都可以取到数组的内容”的?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题