Unicorn# 发表于 2020-7-21 23:44:59

数组形参的长度为什么变为了2

#include<stdio.h>

void func(int array[])
{
        printf("Length of array in func is %d\n", sizeof(array)/sizeof(array));
        return;
}

int main()
{
        int array[] = {0, 1, 2, 3, 4, 5, 6};
        printf("Length of array in main is %d\n", sizeof(array)/sizeof(array));
        func(array);
        return 0;
}
运行以上程序,发现array传入func后长度变短了(总是会变为2),为什么???

永恒的蓝色梦想 发表于 2020-7-21 23:45:00

数组作为函数参数自动退化为指针

baige 发表于 2020-7-22 06:41:33

本帖最后由 baige 于 2020-7-22 06:48 编辑

func函数的array是指针,指针8个字节,array4个字节,8/4=2

livcui 发表于 2020-7-22 08:18:24

如果要使用数组长度,就要传入数组的长度(当然,形参也得改),
不然真没办法,毕竟C把数组名视为数组地址(虽然节省内存),sizeof(array)得到的是指针长度
#include<stdio.h>
const int ArrSize = 7;

void func(int array[], int ArrSize)
{
    printf("Length of array in func is %d\n", ArrSize);
    return;
}

int main()
{
    int array = { 0, 1, 2, 3, 4, 5, 6 };
    printf("Length of array in main is %d\n", sizeof(array) / sizeof(array));
    func(array, ArrSize);
    return 0;
}
这是我改的,你看行吗

livcui 发表于 2020-7-22 10:07:52

livcui 发表于 2020-7-22 08:18
如果要使用数组长度,就要传入数组的长度(当然,形参也得改),
不然真没办法,毕竟C把数组名视为数组地 ...

我就想要个最佳啊{:10_256:}
页: [1]
查看完整版本: 数组形参的长度为什么变为了2