为什么int*类型的指针不能用数组来接收,但是数组作为实参,形参又可以用int*来接收。 那如果我要返回一个数组,该如何做呢?

为什么int类型的指针不能用数组来接收,但是数组作为实参,形参又可以用int来接收。
那如果我要返回一个数组,该如何做呢?

img

返回数据很好处理啊,在输入参数里返回就行了,return 只能返回数值。

int arr[10];
int fun(int *par)
{
  int arr1[10]={1,2,3,4,5,6,7,8,9,10};
  memcpy(par,arr1,sizeof(arr1));
}
void main()
{
  fun(arr);
}

通过以上函数,就可以fun函数的数据,复制到全局变量arr的数组。希望对你有帮助。

int类型的指针变量只能指向一个int类型的变量,而数组是由多个元素组成的集合。因此,如果用int类型的指针变量来接收一个数组,那只能接收到数组的第一个元素。如果你想接收整个数组,你可以用指向数组的指针,而不是int类型的指针。

如果你要返回一个数组,你需要使用指针。你可以定义一个指向数组的指针,然后在函数中动态分配数组空间,将指针指向数组的第一个元素,并在函数结束后返回指针。示例代码如下:

#include <stdio.h>
#include <stdlib.h>

int *create(int n)
{
    int *a = (int *)malloc(n * sizeof(int));  //动态分配n个int类型的空间
    for (int i = 0; i < n; i++)
    {
        a[i] = i; //赋值
    }
    return a; //返回指向数组首地址的指针
}

int main()
{
    int n = 10;
    int *p = create(n); //调用函数返回数组
    for (int i = 0; i < n; i++)
    {
        printf("%d ", p[i]); //输出数组中的元素
    }
    printf("\n");
    free(p); //释放动态分配的空间
    return 0;
}

在使用完毕后,需要使用free()函数释放动态分配的空间,否则会出现内存泄漏。

返回数组就直接用指针接收就行了,如果是C++的话,可以用更加清晰明了的

vector<int> fun();

来声明函数,直接返回vector变量就好

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7794791
  • 这篇博客也不错, 你可以看下编写一个函数,返回一个int数组中存储的最大数值,并在一个简单的程序中测试这个函数。(有缺陷)
  • 除此之外, 这篇博客: 结构体&位域&共用体占用内存解释中的 定义位域时,各个成员的类型最好保持一致,比如都用char,或都用int,不要混合使用,这样才能达到节省内存空间的目的。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •  

    // 位域内存测试
    #include <stdio.h>
    struct ONE_BYTE
    {
        unsigned char _bool : 1;
        unsigned char del_flag : 1;
        unsigned char status : 4;
    } one_byte;
    
    struct TWO_BYTE
    {
        unsigned char ccc1 : 4;
        unsigned char ccc2 : 4;
        unsigned char ccc3 : 4;
        unsigned char ccc4 : 4;
    } two_byte;
    
    struct THREE_BYTE
    {
        unsigned char ccc1 : 4;
        unsigned char ccc2 : 4;
        unsigned char ccc3 : 4;
        unsigned char ccc4 : 4;
        unsigned char ccc5 : 4;
    } three_byte;
    
    struct FOUR_BYTE
    {
        unsigned int ccc1 : 16;
        unsigned int ccc2 : 16;
    } four_byte;
    
    
    int main(int argc, char const *argv[])
    {
        printf("sizeof one_byte is : %lu\n", sizeof(one_byte));
        printf("sizeof two_byte is : %lu\n", sizeof(two_byte));
        printf("sizeof three_byte is : %lu\n", sizeof(three_byte));
        printf("sizeof four_byte is : %lu\n", sizeof(four_byte));
        return 0;
    }