数组形参的长度为什么变为了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),为什么??? 数组作为函数参数自动退化为指针 本帖最后由 baige 于 2020-7-22 06:48 编辑
func函数的array是指针,指针8个字节,array4个字节,8/4=2 如果要使用数组长度,就要传入数组的长度(当然,形参也得改),
不然真没办法,毕竟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 08:18
如果要使用数组长度,就要传入数组的长度(当然,形参也得改),
不然真没办法,毕竟C把数组名视为数组地 ...
我就想要个最佳啊{:10_256:}
页:
[1]